Chrome 扩展:尽管没有错误,EventListener 仍无法正常工作
Chrome extension: EventListener not working despite no error
与其他存在代码问题 (, ) 的类似帖子不同,我不再收到
Uncaught TypeError: Cannot read property 'addEventListener' of null
因为我正在使用 document.onload()
所以他们的解决方案没有帮助
我的代码:
popup.html
<button class="submit" id='checkButton'>
Submit
</button>
<script type="text/javascript" src="./content.js"></script>
<script type="text/javascript" src="/background.js"></script>
Background.js
function submit(){
alert('loaded')
}
document.onload = function(){
document.getElementById("checkButton").addEventListener("click", submit);
console.log('loaded')
}
manifest.json
{
"manifest_version": 2,
"name": "To be named",
"description": "This extension helps...",
"version": "0.1.0",
"browser_action":{
"default_popup":"popup.html"
},
"permissions": [
"storage",
"identity",
"identity.email",
"http://127.0.0.1:5000/test",
"http://127.0.0.1:5000/get/info",
"http://127.0.0.1:5000/test",
"http://0.0.0.0:5000/test",
"http://127.0.0.1:5000/Time"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [{
"matches": ["https://www.blank.org/"],
"js": ["content.js"],
"css": ["styles.css"]
}]
}
然而,当我点击从扩展程序提交时。我没有收到任何 'loaded'(如果我将 func 移动到 content.js,同样适用),我的 chrome://extemsion 也没有收到任何错误,如前所述。
我不是专家,但我认为问题出在您试图从后台脚本编辑 popup.html DOM。那行不通的。试试这个:
background.js:
//Your other javascript...
var views = chrome.extension.getViews({
type: "popup"
});
for (var i = 0; i < views.length; i++) {
views[i].document.getElementById('checkButton').addEventListener("click", submit);
console.log("loaded");
}
我假设这就像您使用 background.js 作为后台脚本一样。不过,我不明白为什么要在 popup.html 的底部包含 background.js。这是我的建议:
popup.html:
<button class="submit" id='checkButton'>
Submit
</button>
<script type="text/javascript" src="./popup.js"></script>
popup.js:
function submit(){
alert('loaded')
}
document.onload = function() {
document.getElementById("checkButton").addEventListener("click", submit);
console.log('loaded')
}
希望这有效! :)
与其他存在代码问题 (
Uncaught TypeError: Cannot read property 'addEventListener' of null
因为我正在使用 document.onload()
所以他们的解决方案没有帮助
我的代码:
popup.html
<button class="submit" id='checkButton'>
Submit
</button>
<script type="text/javascript" src="./content.js"></script>
<script type="text/javascript" src="/background.js"></script>
Background.js
function submit(){
alert('loaded')
}
document.onload = function(){
document.getElementById("checkButton").addEventListener("click", submit);
console.log('loaded')
}
manifest.json
{
"manifest_version": 2,
"name": "To be named",
"description": "This extension helps...",
"version": "0.1.0",
"browser_action":{
"default_popup":"popup.html"
},
"permissions": [
"storage",
"identity",
"identity.email",
"http://127.0.0.1:5000/test",
"http://127.0.0.1:5000/get/info",
"http://127.0.0.1:5000/test",
"http://0.0.0.0:5000/test",
"http://127.0.0.1:5000/Time"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [{
"matches": ["https://www.blank.org/"],
"js": ["content.js"],
"css": ["styles.css"]
}]
}
然而,当我点击从扩展程序提交时。我没有收到任何 'loaded'(如果我将 func 移动到 content.js,同样适用),我的 chrome://extemsion 也没有收到任何错误,如前所述。
我不是专家,但我认为问题出在您试图从后台脚本编辑 popup.html DOM。那行不通的。试试这个:
background.js:
//Your other javascript...
var views = chrome.extension.getViews({
type: "popup"
});
for (var i = 0; i < views.length; i++) {
views[i].document.getElementById('checkButton').addEventListener("click", submit);
console.log("loaded");
}
我假设这就像您使用 background.js 作为后台脚本一样。不过,我不明白为什么要在 popup.html 的底部包含 background.js。这是我的建议:
popup.html:
<button class="submit" id='checkButton'>
Submit
</button>
<script type="text/javascript" src="./popup.js"></script>
popup.js:
function submit(){
alert('loaded')
}
document.onload = function() {
document.getElementById("checkButton").addEventListener("click", submit);
console.log('loaded')
}
希望这有效! :)