0

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

背景.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");
});

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

我刚刚开始开发应用程序,所以没有太多代码可以显示,我已经展示了一些关于我如何尝试使用多窗口的基本代码。

如果我的问题不够清楚,请告诉我。谢谢!

4

1 回答 1

1

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

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

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

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

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

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

    这样做的问题是:你不能以这种方式传递太多信息。

  2. 使用消息chrome.runtime.sendMessage可用于向应用程序的所有部分广播一些数据。但是,它的问题在于确定应用程序的哪个部分应该监听。

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

  4. 如果您从窗口创建的回调中进行访问,则可以直接访问新窗口。

    contentWindow属性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
    }
    

    它甚至在 docs 中作为示例给出。

于 2015-12-18T09:31:11.503 回答