浏览器操作是否可以触发操作并同时打开弹出窗口?

时间:2016-12-09 13:58:40

标签: javascript google-chrome google-chrome-extension

我正在进行扩展,并希望从我的Background.js中更改popup.html ...

这是background.js

中的部分
       popup=chrome.extension.getViews( {type:"popup"});
        html2="Hello World 2";     
        window.onload=function(){popup[0].document.innerHTML="Hello World 2"};
    }
}

2 个答案:

答案 0 :(得分:0)

根据documentation,browserAction图标可以触发 OR 操作弹出窗口,但不能同时。您可以通过编程方式在一个或另一个之间切换,但从不同时工作。

如果您的清单中定义了chrome.browserAction.onClicked.addListener文件,则popup.html中定义的侦听器将 NOT 被调用。

另一方面,如果要以编程方式修改弹出窗口的HTML,只有在弹出窗口打开时才能这样做,因此您可以将代码包含在popup.js文件本身中,或者您使用chrome.runtime.getBackgroundPage访问后台窗口对象并调用您已经拥有的代码。

例如:

<强> background.js

var $username = "noname", $password;    

function modifyMyPopup(){
    var popup = chrome.extension.getViews({type:"popup"});  //get the open popup windows
    for (var i = 0; i < popup.length; i++)  //check all open popups
        if (popup[i].popupMarker)  //if it is our browserAction popup...
            popup[i].document.body.innerHTML = "Hello" + $username;  //modify its body's innerHTML
}

chrome.storage.sync.get(["username","password"],function(items){  //you can get several items at once from the storage
    $username = items.username;
    $password = items.password;
});

<强> popup.html

<html>
<head>
<script src="popup.js" defer></script>
</head>
<body>
Goodbye!
</body>
</html>

<强> popup.js

var popupMarker = 1;    
chrome.runtime.getBackgroundPage(function(bgPage){
    bgPage.modifyMyPopup();
});

答案 1 :(得分:-1)

popup未在您的else语句中定义。如果是这样的声明,你应该在外面做:

popup = chrome.extension.getViews({type:"popup"}); 

if (typeof $username === 'undefined') {
    window.onload = function(){popup.document.innerHTML = "Hello World"};
} else {   
    window.onload = function(){popup.document.innerHTML = "Hello Wolrd 2"};
}