San*_*mar 1 google-chrome-extension
根据权限文档,如果我们有activeTab权限,则不需要指定基于 URL 的权限
以下任何 URL 都与所有主机匹配:
Run Code Online (Sandbox Code Playgroud)http://*/* https://*/* *://*/* <all_urls>请注意,您可以避免 使用 activeTab 权限声明所有主机权限。
但这只能工作一次,第二次出现错误(当我们第二次尝试时,扩展 UI 已打开),如果我们通过单击扩展图标再次启动弹出窗口,则它可以正常工作。
Unchecked runtime.lastError while running tabs.executeScript:
Cannot access contents of the page.
Extension manifest must request permission to access the respective host.
Run Code Online (Sandbox Code Playgroud)
以下为详细内容
清单.json
{
"manifest_version": 2,
"name": "Getting started example",
"description": "This is hello world example",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab"
]
}
Run Code Online (Sandbox Code Playgroud)
弹出窗口.html
<html>
<head>
<title>Getting Started Extension's Popup</title>
<script src="popup.js"></script>
</head>
<body>
<div>Hello World!</div>
<input type="button" id="refreshPage" value="Refresh Page"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
弹出窗口.js
document.addEventListener('DOMContentLoaded', function() {
function refreshPage() {
chrome.tabs.executeScript(null, {
code: 'window.location.reload(true)'
}, function(){
console.log("Page refershed");
});
}
document.getElementById("refreshPage").addEventListener("click", refreshPage);
});
Run Code Online (Sandbox Code Playgroud)
如果我们添加"*://localhost/*"(这适用于本地主机),则还有另一种方法可以为所有主机指定*://*/*(不确定这是否正确且安全),刷新按钮可以多次工作而无需重新启动弹出式 UI。activeTab 与基于 URL 的权限之间是否存在差异,并且由于特定原因推荐任何特定方式而不是其他方式?
activeTab暂时授予权限,直到导航或关闭该选项卡。我的猜测是,通过在刷新时重新加载选项卡会撤销activeTab权限。避免使用window.location.reload或指定与您尝试执行脚本的域匹配的 url。
https://developer.chrome.com/extensions/activeTab
当用户调用扩展程序时(例如通过单击其浏览器操作),activeTab 权限允许扩展程序临时访问当前活动的选项卡。对该选项卡的访问将持续到导航或关闭该选项卡为止。
| 归档时间: |
|
| 查看次数: |
2037 次 |
| 最近记录: |