Javascript 浏览器操作是否可以同时触发操作和打开弹出窗口?
我正在开发一个扩展,希望更改Background.js中的popup.html 下面是background.js中的部分Javascript 浏览器操作是否可以同时触发操作和打开弹出窗口?,javascript,google-chrome,google-chrome-extension,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"}; } } 弹出窗口未在el
popup=chrome.extension.getViews( {type:"popup"});
html2="Hello World 2";
window.onload=function(){popup[0].document.innerHTML="Hello World 2"};
}
}
弹出窗口
未在else语句中定义。您应该在if 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"};
}
根据,browserAction图标可以触发一个动作,也可以打开一个弹出窗口,但不能同时打开这两个窗口。您可以通过编程方式在一个或另一个之间切换,但决不能让两者同时工作
如果清单中定义了popup.html
文件,则将调用chrome.browserAction.onClicked.addListener
中定义的侦听器
另一方面,如果您希望以编程方式修改弹出窗口的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;
});
var popupMarker = 1;
chrome.runtime.getBackgroundPage(function(bgPage){
bgPage.modifyMyPopup();
});
您能提供包括行号在内的全部错误吗?未捕获类型错误:无法读取未定义(…)background.js行号20的属性“document”它指向哪一行?控制台将您指向错误:行
popup.onload.document.innerHTML(“hello World”)
没有什么意义。您想做什么?您的多个问题中的一个已在中介绍:。是的,已更改,但仍然存在相同的错误--background.js:20未捕获类型错误:无法读取未定义(…)window.onload@background.js:20的属性“innerHTML”。请查看:chrome.extension.getViews返回一个数组,不是窗口对象。返回当前扩展中运行的每个页面的JavaScript“窗口”对象数组。…@IvánNokonokoMost可能
chrome.extension.getViews({type:“popup”})
返回空数组,因为代码运行时没有打开的弹出窗口。innerHTML
不是函数。不要尝试innerHTML(“Hello”)
,而是像innerHTML=“Hello”
这样的方法。虽然您已经讨论了最可能出现的问题,因为我们没有完整的OP报告,您还需要考虑OP单独打开的弹出窗口不是浏览器操作弹出窗口的可能性。@确定要这样做吗that@Eminem347$username获取存储在chrome sync存储中的值。如果那里没有价值,那就是undefined@Eminem347:在您尝试使用$username时$username未定义这一事实是本手册中讨论的问题。
var popupMarker = 1;
chrome.runtime.getBackgroundPage(function(bgPage){
bgPage.modifyMyPopup();
});