将控制权转移到新窗口 - chrome打包应用程序

时间:2015-12-17 09:16:51

标签: javascript google-chrome google-chrome-app multi-window

如何将控制权转移到新窗口? 我正在使用具有多窗口功能的chrome打包应用程序。假设我点击"新窗口"它打开了一个新窗口,这是我使用的代码:

background.js:

function create_window(opt_options)
{
    chrome.app.window.create("main.html", opt_options,

    });
}

创建新窗口后,我只需填充div中的值

main.html中

<html class="full-height">
<head>
    <meta charset="utf-8">
    <script src="jquery-2.0.2.js"></script>
    <script src="main.js"></script>
</head>
<body>
    <div id="username">Guest</div>

在main.html中有一个按钮,它从background.js调用新函数的函数,并在div中添加用户名:

main.js

$(".menu-new-window").click(function() {

    create_window()

    $("user_name").html("John Doe");
});

基本流程是,我选择一个用户&#34; John&#34;从列表(父/第一窗口),将打开一个新窗口,John将填充在新窗口的head部分(div id username)中。但是在打开一个新窗口后,它会在父窗口中添加John而不是新窗口。每当我打开一个新窗口时,都会发生这种情况,它总是会更新其父窗口。

我刚刚开始开发应用程序,因此显示的代码不多,我已经显示了一些基本代码,说明我如何尝试使用多窗口。

如果我的问题不够明确,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

正如wOxxOm所提到的,当您在文档中执行代码时,会影响该文档。即使只是理论上,如何你的特定代码知道你的意思是哪个窗口?

您可以使用4种广泛的方法,我并不是说它们是详尽无遗的。我也不会进入太多细节。

  1. 打开一个窗口,其中包含一些以URL编码的参数

    您可以使用查询参数或URL片段将(少量)数据传递到新窗口。 E.g:

    chrome.app.window.create("main.html#u=" + encodeURIComponent("John Doe"));
    

    然后在打开时在另一个窗口中解码location.hash

    问题在于:你不能以这种方式传递大量信息。

  2. 使用Messagingchrome.runtime.sendMessage可用于向应用的所有部分广播一些数据。但问题是要确定应该听哪个应用程序部分。

  3. 使用chrome.storage。这是一个共享存储,原始窗口可以在调用新窗口之前写入,并且新窗口可以从中读取。识别窗口还有一些问题,但更容易避免。

  4. 如果您从窗口创建的回调中执行此操作,则可以使用直接访问新窗口的方法。

    the contentWindow property of AppWindow

    chrome.app.window.create(
      "main.html",
      opt_options,
      function(appWin) {
        otherWindow = appWin.contentWindow;
        otherWindow.username = "John Doe";
      }
    );
    
    // And in the other window
    window.onload = function() {
      // You can use `username` here
    }
    

    甚至给了as a sample in the docs