如何使用chrome.runtime.onMessageExternal函数回调更新DOM

时间:2015-04-21 21:01:37

标签: javascript google-chrome

我正在处理从扩展程序收到地址的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文件?

感谢阅读!

1 个答案:

答案 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);
        }
    }
);