Chrome 扩展:通过按钮将消息从 popup.html 传递到活动页面
Chrome Extensions: Passing message by button from popup.html to event page
我想通过单击 popup.html 中包含的按钮从我的 popup.html 中打开一个新选项卡。
我的方法是从 popup.html 向 eventPage.js 发送一条消息,后者将在收到消息时打开新选项卡。
但这不起作用。请看下面的代码:
popup.html
<!DOCTYPE html>
<html style=''>
<head>
<script src="popup.js"></script>
</head>
<body style="width:400px;">
<div id="content">
<div id="openTab"><button type="button" id="btnOpenTab" name="btnOpenTab" onclick="sendMessage()">Open New Tab</button></div>
</div>
</body>
</html>
eventPage.js
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse)
{
if (request.action == "openNewTab")
chrome.tabs.create({ url: request.url });
}
);
popup.js
function sendMessage()
{
chrome.extension.sendMessage({
action: "openNewTab",
url: "www.google.com"
});
}
manifest.json
{
"name": "Open new tab",
"version": "1.0",
"manifest_version": 2,
"description": "Opens new tab",
"background": {
"scripts": ["eventPage.js"],
"persistent": false
},
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": ["tabs", "<all_urls>"]
}
编辑:在控制台中发现一条错误消息:
拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"script-src 'self' chrome-extension-resource:"。启用内联执行需要 'unsafe-inline' 关键字、散列 ('sha256-...') 或随机数 ('nonce-...')。
问题是您不能在 chrome 扩展中使用 "onclick" 或内联 javascript。必须在header中使用链接的js文件,并使用事件侦听器来处理点击事件。
内容安全策略阻止您在 HTML 中使用 JavaScript(在这种情况下,由于 popup.html
文件中的 onclick="sendMessage()"
,您收到错误消息.
您可以通过从按钮中删除 onclick
属性并在 popup.js
文件中添加事件侦听器来获得所需的结果:
document.getElementById('btnOpenTab').onclick = sendMessage;
删除onclick="sendMessage()"
并将其写入popup.js
function sendMessage(){
chrome.extension.sendMessage({
action: "openNewTab",
url: ""
});
}
document.addEventListener('DOMContentLoaded', function() {
var link = document.getElementById('btnOpenTab');
// onClick's logic below:
link.addEventListener('click', function() {
sendMessage();
});
});
我想通过单击 popup.html 中包含的按钮从我的 popup.html 中打开一个新选项卡。
我的方法是从 popup.html 向 eventPage.js 发送一条消息,后者将在收到消息时打开新选项卡。
但这不起作用。请看下面的代码:
popup.html
<!DOCTYPE html>
<html style=''>
<head>
<script src="popup.js"></script>
</head>
<body style="width:400px;">
<div id="content">
<div id="openTab"><button type="button" id="btnOpenTab" name="btnOpenTab" onclick="sendMessage()">Open New Tab</button></div>
</div>
</body>
</html>
eventPage.js
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse)
{
if (request.action == "openNewTab")
chrome.tabs.create({ url: request.url });
}
);
popup.js
function sendMessage()
{
chrome.extension.sendMessage({
action: "openNewTab",
url: "www.google.com"
});
}
manifest.json
{
"name": "Open new tab",
"version": "1.0",
"manifest_version": 2,
"description": "Opens new tab",
"background": {
"scripts": ["eventPage.js"],
"persistent": false
},
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": ["tabs", "<all_urls>"]
}
编辑:在控制台中发现一条错误消息:
拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"script-src 'self' chrome-extension-resource:"。启用内联执行需要 'unsafe-inline' 关键字、散列 ('sha256-...') 或随机数 ('nonce-...')。
问题是您不能在 chrome 扩展中使用 "onclick" 或内联 javascript。必须在header中使用链接的js文件,并使用事件侦听器来处理点击事件。
内容安全策略阻止您在 HTML 中使用 JavaScript(在这种情况下,由于 popup.html
文件中的 onclick="sendMessage()"
,您收到错误消息.
您可以通过从按钮中删除 onclick
属性并在 popup.js
文件中添加事件侦听器来获得所需的结果:
document.getElementById('btnOpenTab').onclick = sendMessage;
删除onclick="sendMessage()"
并将其写入popup.js
function sendMessage(){
chrome.extension.sendMessage({
action: "openNewTab",
url: ""
});
}
document.addEventListener('DOMContentLoaded', function() {
var link = document.getElementById('btnOpenTab');
// onClick's logic below:
link.addEventListener('click', function() {
sendMessage();
});
});