[英]JavaScript open in a new window, not tab
我有一個選擇框,它在選擇項目時調用window.open(url)
。 默認情況下,Firefox 將在新選項卡中打開該頁面。 但是,我希望頁面在新窗口中打開,而不是在新選項卡中打開。
我怎樣才能做到這一點?
為open
調用指定窗口“功能”:
window.open(url, windowName, "height=200,width=200");
當您指定寬度/高度時,它將在新窗口而不是選項卡中打開它。
有關所有可能的功能,請參閱https://developer.mozilla.org/en-US/docs/Web/API/Window.open#Position_and_size_features 。
您不需要使用高度,只需確保使用_blank
,沒有它,它會在新選項卡中打開。
對於空窗口:
window.open('', '_blank', 'toolbar=0,location=0,menubar=0');
對於特定的 URL:
window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
我可能是錯的,但據我所知,這是由用戶的瀏覽器首選項控制的,我不相信這可以被覆蓋。
嘗試:
window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");
我有一些代碼可以做你所說的,但是里面有很多參數。 我認為這些是最低限度的,如果它不起作用,請告訴我,我會發布其余的。
好的,經過大量測試后,我的結論是:
當您執行:
window.open('www.yourdomain.tld','_blank');
window.open('www.yourdomain.tld','myWindow');
或者無論您在目標字段中放置什么,這都不會改變任何內容:新頁面將在新選項卡中打開(因此取決於用戶偏好)
如果要在新的“真實”窗口中打開頁面,則必須添加額外的參數。 喜歡:
window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');
經過測試,您使用的額外參數似乎並不重要:這不是您放置“這個參數”或“另一個”創建新“真實窗口”的事實,而是存在新參數的事實)。
但有些東西令人困惑,可能會解釋很多錯誤的答案:
這:
win1 = window.open('myurl1', 'ID_WIN');
win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
和這個:
win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
win1 = window.open('myurl1', 'ID_WIN');
不會給出相同的結果。
在第一種情況下,當您第一次打開一個沒有額外參數的頁面時,它將在一個新選項卡中打開。 在這種情況下,由於您提供的名稱,第二個調用也將在此選項卡中打開。
在第二種情況下,由於您的第一次調用是使用額外參數進行的,因此頁面將在新的“真實窗口”中打開。 在這種情況下,即使在沒有額外參數的情況下進行第二次調用,它也會在這個新的“真實窗口”中打開……但是相同的選項卡!
這意味着第一次調用很重要,因為它決定了頁面的放置位置。
您可以嘗試以下功能:
<script type="text/javascript">
function open(url)
{
var popup = window.open(url, "_blank", "width=200, height=200") ;
popup.location = URL;
}
</script>
執行的HTML代碼:
<a href="#" onclick="open('http://www.google.com')">google search</a>
你不應該需要。 允許用戶擁有他們想要的任何偏好。
Firefox 默認會這樣做,因為在新窗口中打開頁面很煩人,如果用戶不希望這樣,則絕不應允許頁面這樣做。 (如果您這樣設置,Firefox 確實允許您在新窗口中打開選項卡)。
關鍵是參數:
如果您提供參數 [ Height="" , Width="" ] ,則它將在新窗口中打開。
如果您不提供Parameters ,則它將在新選項卡中打開。
在 Chrome 和 Firefox 中測試
有趣的是,我發現如果為 window.open 的第三個屬性傳入一個空字符串(而不是空字符串或屬性列表),它將在 Chrome、Firefox 和 IE 的新選項卡中打開。 如果不存在,行為就會不同。
所以,這是我的新電話:
window.open(url, windowName, '');
試試那個方法.....
function popitup(url) {
//alert(url);
newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
newwindow.moveTo(350,150);
if (window.focus)
{
newwindow.focus()
}
return false;
}
對我來說,解決方案是有
"location=0"
在第三個參數中。 在最新的 FF/Chrome 和舊版本的 IE11 上測試
我使用的完整方法調用如下(因為我喜歡使用可變寬度):
window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
我剛剛用 IE (11) 和 Chrome (54.0.2794.1 canary SyzyASan) 嘗試了這個:
window.open(url, "_blank", "x=y")
...它在一個新窗口中打開。
這意味着Clint pachl說得對,他說提供任何一個參數都會導致新窗口打開。
- 顯然它不必是一個合法的參數!
(YMMV - 正如我所說,我只在兩個地方測試了它......並且下一次升級可能會使結果無效,無論如何)
ETA:我剛剛注意到 - 在 IE 中,窗口沒有裝飾。
在這里回答。 不過再貼一次供參考。
如果實際點擊事件中沒有發生window.open()
將不會在新選項卡中打開。 在給出的示例中,url 是在實際點擊事件上打開的。 如果用戶在瀏覽器中有適當的設置,這將起作用。
<a class="link">Link</a>
<script type="text/javascript">
$("a.link").on("click",function(){
window.open('www.yourdomain.com','_blank');
});
</script>
同樣,如果您嘗試在 click 函數中進行 ajax 調用並希望在成功時打開一個窗口,請確保您正在使用async : false
選項集進行 ajax 調用。
我認為這不是 html 目標屬性問題,但您在 firefox“選項”菜單下的“選項卡”選項卡中取消選中“在新選項卡中打開 nw 窗口”選項。 檢查它並重試。
我有同樣的問題,但找到了一個相對簡單的解決方案。
在 JavaScript 中,我正在檢查window.opener !=null;
以確定窗口是否彈出。 如果您使用一些類似的檢測代碼來確定正在呈現您站點的窗口是否是一個彈出窗口,當您想使用新的 windows JavaScript 打開“新”窗口時,您可以輕松地“將其關閉” 。
只需將它放在頁面頂部,您就希望它始終是一個“新”窗口。
<script type="text/javascript">
window.opener=null;
</script>
我在我網站的登錄頁面上使用它,這樣用戶在使用彈出窗口導航到我的網站時不會出現彈出行為。
您甚至可以創建一個簡單的重定向頁面來執行此操作,然后移動到您提供的 URL。 就像是,
父頁面上的 JavaScript:
window.open("MyRedirect.html?URL="+URL, "_blank");
然后通過使用這里的一些 javascript,您可以獲得 URL 並重定向到它。
重定向頁面上的 JavaScript:
<script type="text/javascript">
window.opener=null;
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
var params = getSearchParameters();
window.location = params.URL;
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.