如何将控制权转移到新窗口? 我正在开发一个具有多窗口功能的 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 种广泛的方法,我并不是说它们是详尽的。我也不会讲太多细节。
打开一个窗口,其中一些参数编码在 URL 中
您可以使用查询参数或 URL 片段将(少量)数据传递到新窗口。例如:
chrome.app.window.create("main.html#u=" + encodeURIComponent("John Doe"));
然后在另一个窗口打开时解码
location.hash
。问题在于:您无法通过这种方式传递太多信息。
使用Messaging 。
chrome.runtime.sendMessage
可用于将一些数据广播到应用程序的所有部分。但它的问题是确定应用程序的哪一部分应该监听。使用
chrome.storage
。这是一个共享存储,原始窗口可以在调用新窗口之前对其进行写入,并且新窗口可以从中读取。识别窗口又存在一些问题,但更容易避免。如果您从窗口创建的回调中执行此操作,则可以直接访问新窗口。
即,the
contentWindow
property ofAppWindow
.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/