Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器操作是否可以同时触发操作和打开弹出窗口?_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

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

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

我正在开发一个扩展,希望更改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"};
    }
}

弹出窗口
未在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();
});