我是 Google Chrome扩展程序的新手。我在扩展程序中创建了一个按钮。使用该按钮,我想将用户重定向到另一个站点(例如" www.example.com")。 我有以下为重定向编写的代码,但它不起作用。
的manifest.json
{
"name": "Popup ",
"manifest_version": 2,
"version": "0.1",
"description": "Run process on page activated by click in extension popup",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs", "http://*/*", "https://*/*"
]
}
popup.html
<html>
<head>
<script src="popup.js"></script>
<style type="text/css" media="screen">
body { min-width:250px; text-align: center; }
#click-me { font-size: 15px; }
</style>
</head>
<body>
<button id='click-me'>Click Me!</button>
</body>
</html>
background.js
chrome.extension.onRequest.addListener(function(request, sender) {
chrome.tabs.update(sender.tab.id, {url: request.redirect});
});
popup.js
function clickHandler(e) {
chrome.extension.sendRequest({redirect: "https://www.google.co.in"});
alert("url");
this.close();
}
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('click-me').addEventListener('click', clickHandler);
})
你知道它为什么不起作用吗?
答案 0 :(得分:7)
如果您使用background pages,那么您需要在清单文件中声明后台脚本(在您的情况下为background.js):
"background": {
"scripts": [ "background.js" ]
},
您的示例不起作用,因为sender.tab
仅在请求来自制表符或内容脚本时定义,而不是来自弹出窗口。
在您的示例中,根本不需要背景页面,您可以直接从弹出页面使用chrome.tabs
API:
function clickHandler(e) {
chrome.tabs.update({url: "https://example.com"});
window.close(); // Note: window.close(), not this.close()
}
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('click-me').addEventListener('click', clickHandler);
});