2010-06-03 30 views
12

Tôi có hai trang one.html và two.htmlđặt tiêu điểm của một cửa sổ popup mỗi khi

Tôi mở một cửa sổ mới sử dụng đoạn mã sau

//here popup is a global variable 
popup=window.open('two.html','two'); 

lần đầu tiên một cửa sổ popup mở thành công và lấy tiêu điểm nhưng nếu tôi cố gắng mở lại mà không đóng cửa sổ bật lên đã mở thì hai.html không được lấy tiêu điểm lần thứ hai.

lưu ý: Tôi đã đặt tên cửa sổ bật lên cửa sổ như 'hai'

+0

Không chắc chắn điều này có thể được thực hiện. Làm thế nào về việc mở một cửa sổ mới? –

+1

tôi chỉ muốn mở một cửa sổ mới chỉ một lần, không phải mỗi lần – hunt

+1

chấp nhận ans nếu nó hoạt động cho bạn –

Trả lời

9

bạn có thể đạt được bằng cách sử dụng focus chức năng như sử dụng dưới đây

<script language="javascript" type="text/javascript"> 
<!-- 
function popitup(url) { 
    newwindow=window.open(url,'name','height=200,width=150'); 
    if (window.focus) {newwindow.focus()} 

     if (!newwindow.closed) {newwindow.focus()} 
    return false; 
} 

// --> 
</script> 
+0

cũng ở trên mã chỉ hoạt động trong IE nhưng bây giờ trong firefox 3.6 – hunt

+0

@hunt: Google Chrome. Tập trung cửa sổ theo cách này không tương thích với trình duyệt chéo. –

+1

Cũng tương thích "" ở chỗ nó sẽ không làm hại bất cứ điều gì để thử, nhưng Firefox, Chrome và Safari sẽ không tuân theo yêu cầu. Firefox có thể được cấu hình bởi người dùng của nó để cho phép 'focus()' yêu cầu như vậy để làm việc, nhưng tôi nghĩ rằng Chrome và Safari luôn bỏ qua nó. Không có cách nào để buộc các trình duyệt đó phải chú ý. (Trong thực tế Safari là * thực sự * nghiêm túc về nó: http://whatsthepointy.blogspot.com) – Pointy

1

Bạn có thể đóng cửa sổ bật lên trước khi bạn mở nó nếu bạn kiểm tra xem nếu cửa sổ bật lên đã mở khi bạn gọi hàm.

var popup; 
​function openPop() { 
    if ("close" in popup) popup.close(); 
    popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");​​​​​​​​ 
} 

Điều này sẽ đảm bảo cửa sổ bật lên luôn xuất hiện trên đầu.

+0

mã này sẽ đóng cửa sổ đã mở trước đây của tôi và mở cửa sổ khác. tôi không muốn đóng cửa sổ trước đây của tôi – hunt

+0

@hunt: Giống như tôi đã nói trong nhận xét của tôi về câu trả lời của [pranay_stacker] (http://stackoverflow.com/questions/2965754/set-the-focus-of-a-popup- window-everytime/2965817 # 2965817), phương pháp lấy nét sẽ không hoạt động trên trình duyệt cho các cửa sổ popup. Tôi khá chắc chắn rằng không có cách nào khác để lấy nét lại cửa sổ. –

8
focusedWindow = window.open('two.html','two').focus(); 

Trực tiếp thêm sự tập trung() để tạo các mẫu prototype window.open

+0

Giải pháp đơn giản ... Nó WORKSSS – ELAYARAJA

+0

Không hoạt động trên safari trong iphone – Zohaib

+0

Không hoạt động trong Edge và Firefox. – sibbl

1

Kiểm tra cài đặt Firefox 2 tại

  1. Vào Tools -> Options -> Content
  2. Hãy chắc chắn rằng " Bật JavaScript "được bật.
  3. Bên cạnh "Bật JavaScript", nhấp vào nút "Nâng cao".
  4. Hãy chắc chắn rằng có một check-mark trong hộp [x] Tăng hoặc cửa sổ thấp

Nếu các thiết lập "Nâng cao hoặc cửa sổ thấp" bị tắt, sau đó này vô hiệu hóa các window.focus() phương pháp.

2
var win = window.open('two.html','two'); 
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window. 
+0

Cách tiếp cận này đã làm việc cho tôi được thử nghiệm trong Chrome48, FF42 và IE11. – Doug

+0

Không làm việc cho tôi. Nó mở "hai.html" trong tab đầu tiên của tôi, nơi tôi gọi mã này. Và có, tôi đã thay đổi tên var của 'window'. Tôi có thể khắc phục hành vi này bằng cách gọi dòng thứ hai sau một chút thông qua setTimeout, nhưng sau đó nó không tập trung vào phần thân trong Edge. – sibbl

6

giải pháp theo kinh nghiệm của tôi rằng luôn luôn làm việc:

setTimeout('detail.focus()', 1); 

Phụ thêm .focus() ngay sau khi mở không phải lúc nào làm việc, cũng không gọi một .focus() mà không setTimeout.

Tôi biết nó xấu xí (muốn loại bỏ nó ngay bây giờ, sau một vài năm, không thành công), và tôi không biết chính xác lý do tại sao và như thế nào, nhưng nó hoạt động.

+0

Tôi đã khắc phục sự cố firefox của mình bằng cách thực hiện setTimeout (function() {window.open (...)}, 1) –

+0

như tôi đã hiểu, setTimeout sẽ kích hoạt tập lệnh của nó sau khi dòng cuối cùng của tập lệnh hiện tại được hoàn thành thực thi, nhưng nó sẽ không hoạt động trong các tập lệnh đa luồng, bởi vì tập lệnh định thời sẽ chạy đúng lúc ... –

0
setTimeout(function() { 
    window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100); 

-> Mã này được sử dụng để tập trung vào cửa sổ mới mở. -> Đặt nó trong javascript. ('SetTimeout là chức năng sẵn có của javascript') -> Nhiều lần xảy ra khi cửa sổ bật lên được mở, nó sẽ đi sau cửa sổ cũ, Vì vậy, ở trên rất hữu ích để tập trung cho cửa sổ mới.

+1

Chào mừng bạn đến với Stack Tràn ra! Thay vì chỉ đăng một khối mã, vui lòng giải thích tại sao mã này giải quyết được vấn đề được đặt ra. Nếu không có một lời giải thích, đây không phải là một câu trả lời. – Artemix

0

Nó là một trong những giải pháp lót, sử dụng tập trung vào pop của bạn lên var:

popup=window.open('two.html','two'); 
popup.focus(); 

này sẽ luôn luôn mở cửa sổ pop của bạn lên cửa sổ ngay cả khi nó không được đóng lại.

0

Tôi tìm thấy câu trả lời cho chính mình hoạt động. Trong html của nội dung bật lên, thêm vào thẻ body onload = "this.window.focus()". Ngay cả khi bạn thu nhỏ cửa sổ, nó sẽ bật lên phía trước và giữa. Hãy chắc chắn và đặt tên cho cửa sổ trong cửa sổ thực thi của bạn window.open ('url', 'some name', 'vars'); Hy vọng điều này sẽ giúp bạn!

0

Rất tiếc, một số trình duyệt hiện đại vẫn không hỗ trợ các tab lấy nét, xem ví dụ this Firefox bug entry.

Tuy nhiên, mã sau đây hoạt động tốt cho tôi. Để giải quyết sự cố này, cửa sổ mở lại cửa sổ/tab nếu nó không thể tập trung:

var win = window.open("two.html", "two") 
    win.focus(); 
    setTimeout(function() { 
    if(document.hasFocus()) { 
     win.close(); 
     window.open("two.html", "two") 
    } 
    }, 1); 

Dòng đầu tiên mở cửa sổ và cố lấy nét bằng cách sử dụng dòng thứ hai. Nếu cửa sổ có tên two đã có, không có cửa sổ/tab mới được mở, nhưng nó được sử dụng lại.

Bí quyết hiện tại là chúng tôi kiểm tra xem cửa sổ hiện tại vẫn có tiêu điểm bằng cách sử dụng document.hasFocus(). Nếu vậy, chúng tôi đóng cửa sổ lại và mở lại. Điều này chỉ dành cho các trình duyệt không hỗ trợ tập trung vào tab sẽ được sử dụng lại trực tiếp. Hiện tại, đây là trường hợp của FF và IE/MS Edge. Chrome hoạt động tốt.

Tuy nhiên, trực tiếp sau khi sử dụng window.open, document.hasFocus() luôn trả về đúng (như đã nói, cũng trong Chrome). Giải pháp thay thế là sử dụng setTimeout một ms sau đó.

Các vấn đề liên quan