簡體   English   中英

使用JavaScript在新窗口/選項卡(target = _blank)中檢測功能

[英]Feature detect opening in a new window/tab(target=_blank) with JavaScript

根據我的研究:

  • “WebView”可以禁用“在新窗口/選項卡中打開鏈接”。
  • 本機應用程序開發人員使用WebView在其應用程序中顯示網頁(請參閱Twitter的應用程序)。
  • 通過用戶代理檢測WebView不能始終如一地工作,無論如何都不是最佳實踐。
  • 只需嘗試使用JS打開一個新窗口就會觸發彈出窗口阻止程序; 使它成為一種不可靠的方法來測試是否可以打開一個新窗口。

我需要檢測此功能何時不可用。 不可能?

附加說明

我正在嘗試檢測是否可以通過target = _blank打開一個新窗口。 例如,UIWebView [應用內瀏覽器]可以阻止target = _blank按預期工作[它只是在同一個窗口而不是新窗口中打開]。 我需要一個解決方案來指示由於瀏覽器限制而無法打開新窗口,例如在UIWebView案例中。 不幸的是,彈出窗口阻止程序阻止檢查這樣的功能,因為它們永遠不允許打開新窗口而無需繞過用戶輸入(即點擊)。

你不會有100%可靠的東西。

只需嘗試使用JS打開一個新窗口就會觸發彈出窗口阻止程序; 使它成為一種不可靠的方法來測試是否可以打開一個新窗口。

你是對的,絕對不可靠... window.open()被阻止(即使有一個像window.open(url, '_blank');window.focus();的技巧window.open(url, '_blank');window.focus(); ), click()也被阻止(在包含target =“_ blank”的鏈接上,就像evt = document.createEvent("MouseEvents");evt.initEvent("click", true, true); ...

但無論如何:如果WebView不允許在新選項卡中打開鏈接,那么它將正常工作。 但是,正如您所暗示的,Webview可能會對其進行授權。 在這種情況下,您將不知道您是否在webview中。 很容易檢測新標簽中的開放鏈接是否最終以相同或不同的方式打開(可以在非顯示的iframe中以javascript進行測試),但如果在瀏覽器中打開鏈接,則無法知道(並設想用戶體驗javascript代碼,從應用程序中打開瀏覽器中的新選項卡...)。 正如Dave Alperovich所說,如果沒有嘗試過,你無法提前知道會被阻擋的是什么。 所以你不應該看那邊。

沒有可靠的功能或行為區分Webview和Web瀏覽器 在webview中,您可以獲得瀏覽器中的所有內容(cookies,WebStorage ...)。 用戶代理有其不完善之處,但在許多情況下都可以使用。 這里這里有解釋來構建它。

根據OP請求我測試了它。 它有效。 如果彈出窗口阻止程序已啟用,我將捕獲它,因此我將獲得一個可靠的方法來知道它已啟用。 在這種情況下,我只是發送警報,但你可以做任何你想做的事情。

這是代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Testing Pop-up Blocker</title>
<script>
function openPopUp(urlToOpen) {
  var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400");            
  try {
    popup_window.focus();   
  }
  catch (e) {
    alert("Pop-up Blocker is enabled! Please add this site to your exception list.");
  }
}
</script>
</head>
<body onload="openPopUp('http://www.google.com'); return false;">
<p>Testing Pop-up Blocker</p>
</body>
</html>

這是我得到的,因為彈出窗口阻止程序已啟用。

在此輸入圖像描述

暫無
暫無

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

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