无法使用 Chrome 扩展弹出窗口中的按钮打开新标签页
Unable to open a new tab using a button within a Chrome Extension popup
我正在尝试编写一个 Chrome 扩展弹出窗口,其中将包含一些选项:根据选定的选项,我必须生成一个 URL 并将其加载到新标签。我已经尝试了几乎所有我找到的解决方案,但我仍然无法理解我做错了什么。我在下面提供了详细信息。
manifest.json
{
"name": "New Extension",
"version": "1",
"description": "New Extension",
"manifest_version": 2,
"browser_action": {
"name": "New Extension",
"default_popup": "popup.html",
"default_icon": "icon.png"
},
"permissions": [ "tabs" , "<all_urls>"]
}
popup.html
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
<script src="popup.js"></script>
</head>
<body style="width: 400px" bgcolor= "#FFFFFF">
Operation:<input type="radio" name="operation" id="Google" checked="checked">Google
<input type="radio" name="operation" id="Yahoo">Yahoo<br/>
<input type="button" name="btngenerate" id="btngenerate" value="Generate" />
</body>
</html>
popup.js
document.getElementById("btngenerate").addEventListener('click', function() {
alert("in generate URL");
var URL = "http://google.com";
if (document.getElementById("yahoo").checked == true)
URL = "http://yahoo.com";
chrome.tabs.create({url: URL});
});
当我尝试执行此操作时,我能够看到弹出窗口,但是当我单击 "Generate" 时,没有任何反应。我的代码有什么问题?
Chrome 开始按标签解析您的 HTML 文件标签并填充 DOM.
一旦遇到<script>
标签,它就会被执行。
因此,您的代码在 #btngenerate
存在于 DOM 之前执行。
您需要将其包装在一个事件中,该事件将在文件被完全读取并构建 DOM 后触发:
document.addEventListener("DOMContentLoaded", function() {
document.getElementById("btngenerate").addEventListener(/*...*/);
});
我正在尝试编写一个 Chrome 扩展弹出窗口,其中将包含一些选项:根据选定的选项,我必须生成一个 URL 并将其加载到新标签。我已经尝试了几乎所有我找到的解决方案,但我仍然无法理解我做错了什么。我在下面提供了详细信息。
manifest.json
{
"name": "New Extension",
"version": "1",
"description": "New Extension",
"manifest_version": 2,
"browser_action": {
"name": "New Extension",
"default_popup": "popup.html",
"default_icon": "icon.png"
},
"permissions": [ "tabs" , "<all_urls>"]
}
popup.html
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
<script src="popup.js"></script>
</head>
<body style="width: 400px" bgcolor= "#FFFFFF">
Operation:<input type="radio" name="operation" id="Google" checked="checked">Google
<input type="radio" name="operation" id="Yahoo">Yahoo<br/>
<input type="button" name="btngenerate" id="btngenerate" value="Generate" />
</body>
</html>
popup.js
document.getElementById("btngenerate").addEventListener('click', function() {
alert("in generate URL");
var URL = "http://google.com";
if (document.getElementById("yahoo").checked == true)
URL = "http://yahoo.com";
chrome.tabs.create({url: URL});
});
当我尝试执行此操作时,我能够看到弹出窗口,但是当我单击 "Generate" 时,没有任何反应。我的代码有什么问题?
Chrome 开始按标签解析您的 HTML 文件标签并填充 DOM.
一旦遇到<script>
标签,它就会被执行。
因此,您的代码在 #btngenerate
存在于 DOM 之前执行。
您需要将其包装在一个事件中,该事件将在文件被完全读取并构建 DOM 后触发:
document.addEventListener("DOMContentLoaded", function() {
document.getElementById("btngenerate").addEventListener(/*...*/);
});