我正在尝试从我的Chrome应用中打开常规浏览器标签。 我想打开标签,不需要在它们之间进行通信。 到目前为止,我已经尝试了以下两种方法,它们都创建并加载新选项卡。
var a = document.createElement('a')
a.href = "https://example.com";
a.target = "_blank";
a.click();
var w = window.open(s.Url, "_blank");
w.focus();
另一种尝试导致相同的结果。这个硬编码到html中,并由用户点击它激活。所以这个问题与javascript本身无关,而是chrome处理外部链接的方式。
<a href="https://example.com/" target="_blank">Open external website</a>
但是在这些创建的选项卡中,localStorage为null。 显然,该选项卡仍然在某些应用环境中打开。 如果我复制URL并将其粘贴到新选项卡中,则localStorage可用。
如何打开类似于用户复制/粘贴网址的新浏览器标签。
UPDATE 应用程序是从后台页面使用window.open启动的,以创建选项卡而不是新窗口。如果使用了chrome.app.window.create,则可以在浏览器中使用localStorage正确打开链接。
答案 0 :(得分:1)
根据症状判断,您是从后台(事件)页面执行此操作。从后台页面调用时,window.open()当前非常错误。有一个bug申请了,proposal用于API,旨在解决这个问题。这是你在此期间可以做的事情:
在使用document.createElement('a')的解决方案中,您正在错误的文档中创建元素(根据上面的错误,“错误”)。这是后台页面窗口的文档,您应该使用其中一个内容窗口。将您创建元素的方式更改为:
var a = win.contentWindow.document.createElement('a');
其中win
是chrome.app.window.create
回调中返回的应用窗口对象。这应该有效。
您无法在后台页面中修改window.open(),但请参阅下面的#3。
<强> main.html中强>
<html>
<body>
...
<script src="main.js"></script>
</body>
</html>
<强> main.js 强>
function SomeEventHandler() {
// This...
var a = document.createElement('a')
a.href = "https://example.com";
a.target = "_blank";
a.click();
// ... or this will both work.
window.open("https://example.com");
}