从chrome-app打开浏览器选项卡,可以访问localStorage

时间:2013-11-19 08:21:10

标签: javascript local-storage google-chrome-app

我正在尝试从我的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正确打开链接。

1 个答案:

答案 0 :(得分:1)

根据症状判断,您是从后台(事件)页面执行此操作。从后台页面调用时,window.open()当前非常错误。有一个bug申请了,proposal用于API,旨在解决这个问题。这是你在此期间可以做的事情:

  1. 在使用document.createElement('a')的解决方案中,您正在错误的文档中创建元素(根据上面的错误,“错误”)。这是后台页面窗口的文档,您应该使用其中一个内容窗口。将您创建元素的方式更改为:

    var a = win.contentWindow.document.createElement('a');

    其中winchrome.app.window.create回调中返回的应用窗口对象。这应该有效。

  2. 您无法在后台页面中修改window.open(),但请参阅下面的#3。

  3. 或者,如果在您的情况下可以,您可以将2个解决方案中的任何一个解决方案移动到从.html调用的脚本中:
  4. <强> 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");
    }