簡體   English   中英

每次設置彈出窗口的焦點

[英]set the focus of a popup window every time

我有兩頁 one.html 和 two.html

我正在使用以下代碼打開一個新窗口

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

第一次彈出窗口成功打開並獲得焦點,但如果我嘗試再次打開它而不關閉已打開的彈出窗口,那么 two.html 不會第二次獲得焦點。

注意:我已將彈出窗口的名稱設置為“兩個”

您可以使用下面使用的focus功能來實現

<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>
focusedWindow = window.open('two.html','two').focus();

直接將 focus() 附加到 window.open 原型

我的經驗解決方案始終有效:

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

在打開后立即附加.focus()並不總是有效,也不總是在沒有 setTimeout 的情況下調用.focus()

我知道它很丑(我想現在擺脫它,幾年后,沒有成功),我不知道為什么和如何的確切原因,但它有效。

如果在調用該函數時檢查彈出窗口是否已經打開,則可以在打開它之前關閉該彈出窗口。

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

這將確保彈出窗口始終顯示在頂部。

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

檢查您的 Firefox 2 設置

  1. 轉到工具 -> 選項 -> 內容
  2. 確保“啟用 JavaScript”已打開。
  3. 在“啟用 JavaScript”旁邊,單擊“高級”按鈕。
  4. 確保復選框 [x] 升高或降低窗戶中有復選標記

如果關閉“升高或降低窗口”設置,則會禁用 window.focus() 方法。

我為自己找到了一個有效的答案。 在彈窗正文的 html 中,添加到正文標記 onload="this.window.focus()"。 即使您最小化窗口,它也會從前面和中間彈出。 確保並在執行腳本中命名窗口 window.open('url','some name','vars'); 希望這對你有幫助!

不幸的是,一些現代瀏覽器仍然不支持聚焦選項卡,例如,請參閱此 Firefox 錯誤條目

但是,以下代碼對我來說效果很好。 作為一種解決方法,如果無法聚焦,它會重新打開窗口/選項卡:

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

在第一行中,它打開窗口並嘗試使用第二行將其聚焦。 如果名稱為two的窗口已經存在,則不會打開新窗口/選項卡,但會重復使用它。

現在的技巧是,我們使用document.hasFocus()檢查當前窗口是否仍然具有焦點。 如果是這樣,我們關閉窗口並重新打開它。 這僅適用於不支持聚焦要直接重用的選項卡的瀏覽器。 目前,FF 和 IE/MS Edge 就是這種情況。 鉻效果很好。

然而,直接在使用window.opendocument.hasFocus()總是返回 true (如此說,也在 Chrome 中)。 解決方法是在一毫秒后使用setTimeout

只需將 .focus() 添加到 window.open 行window.open('two.html','two').focus()

我確實遇到了同樣的問題,這似乎在 Firefox 和 Chromium 網絡瀏覽器中都有效。 在我的網站thaiiceland.com 中,我注意到如果彈出窗口是打開的,焦點不會放在彈出窗口上,當您單擊該鏈接時,您會感覺沒有任何反應。 所以我搜索並嘗試在 window.open 行的末尾添加 .focus() 之后它就可以工作了。

<a href="currency.html" onclick="javascript:void window.open('currency.html','thaiice02','width=900,height=560,scrollbars=1,resizable=1,top=80,left=150').focus();return false;">Curency converter - แปลงสกุลเงิน</a>
setTimeout(function () { 
  window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100);

-> 此代碼用於將焦點放在新打開的窗口上。 -> 把它放在javascript.('setTimeout 是javascript 的內置函數') -> 很多時候,當彈出窗口打開時,它會跑到舊窗口的后面,所以上面對新窗口的焦點非常有用。

這是一個單行解決方案,使用焦點在你的彈出變量上:

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

即使它沒有關閉,這也將始終打開您的彈出窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM