我正在处理从扩展程序收到地址的Chrome应用程序,并且应该使用webview标记和Chrome运行时API消息发送在应用程序窗口中打开该URL。
我试图获取chrome.window.create回调函数来更新创建的index.html页面。 它没有像我计划的那样工作。
以下是代码:
chrome.runtime.onMessageExternal.addListener(
function (request, sender, sendResponse) {
chrome.app.window.create(
'index.html',
{PARAMETERS},
function () {
//get
var thisWindow = document.querySelector("webview");
thisWindow.setAttribute("src", request.url);
}
);
}
index.html文件只是一个webview标记和一些样式。
收到消息后,将打开一个空窗口。但是,当我在应用程序打开时再次发送时打开页面,这意味着回调可能在创建之前尝试访问index.html文件?
感谢阅读!
答案 0 :(得分:1)
在执行创建的窗口window.create
事件(see here)之前调用onload
回调函数。所以可能在这个阶段尚未提供DOM。您可以做的是,将您的修改绑定到创建的窗口onload
事件,从而确保DOM可用。
chrome.app.window.create(
'index.html',
{
PARAMETERS
},
function (createdWindow) {
var contentWindow = createdWindow.contentWindow;
contentWindow.onload = function() {
var thisWindow = contentWindow.document.querySelector("webview");
thisWindow.setAttribute("src", request.url);
}
}
);