如何将控制权转移到新窗口? 我正在使用具有多窗口功能的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而不是新窗口。每当我打开一个新窗口时,都会发生这种情况,它总是会更新其父窗口。
我刚刚开始开发应用程序,因此显示的代码不多,我已经显示了一些基本代码,说明我如何尝试使用多窗口。
如果我的问题不够明确,请告诉我。谢谢!
答案 0 :(得分:1)
正如wOxxOm所提到的,当您在文档中执行代码时,会影响该文档。即使只是理论上,如何你的特定代码知道你的意思是哪个窗口?
您可以使用4种广泛的方法,我并不是说它们是详尽无遗的。我也不会进入太多细节。
打开一个窗口,其中包含一些以URL编码的参数
您可以使用查询参数或URL片段将(少量)数据传递到新窗口。 E.g:
chrome.app.window.create("main.html#u=" + encodeURIComponent("John Doe"));
然后在打开时在另一个窗口中解码location.hash
。
问题在于:你不能以这种方式传递大量信息。
使用Messaging。 chrome.runtime.sendMessage
可用于向应用的所有部分广播一些数据。但问题是要确定应该听哪个应用程序部分。
使用chrome.storage
。这是一个共享存储,原始窗口可以在调用新窗口之前写入,并且新窗口可以从中读取。识别窗口还有一些问题,但更容易避免。
如果您从窗口创建的回调中执行此操作,则可以使用直接访问新窗口的方法。
即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
}