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

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

如何将控制权转移到新窗口? 我正在开发一个具有多窗口功能的 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 用户名)中。但是打开新窗口后,它会将 John 添加到父窗口而不是新窗口中。每当我打开一个新窗口时都会发生这种情况,它总是更新其父窗口。

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

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

最佳答案

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

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

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

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

    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 .

关于javascript - 将控制权转移到新窗口 - chrome 打包应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330757/

相关文章:

firefox - 当站点的 SSL 证书更改时让浏览器通知您

java - 按下目标为 'frozen' 的 commandLink 后,Chrome 中的页面变为 ="_blank"

javascript - 如何防止 Angular 拦截器在 jasmine 测试期间获取 $httpBackend 响应

javascript - 创建一个新的 Date 对象或使用 javascript Date() 的 setter 方法

javascript - 用较大的图像替换较小的图像(在加载较大的图像后)

google-chrome-app - 如何在 Chrome 应用程序中包含数据文件以供 native 客户端模块读取

ios - 无法使用chrome.bluetoothLowEnergy从iOS外围设备获取服务

javascript - 我正在尝试更改此代码中的语法

javascript - Chrome 扩展程序使鼠标点击扩展程序

javascript - Chrome 消息 : chrome. runtime.sendMessage 不适用于最新版本 49