【发布时间】:2017-03-11 20:13:45
【问题描述】:
对于一个测试用例,我想尝试输出当前选项卡的 URL。 我的 manifest.json
{
"manifest_version": 2,
"name": "Chrome Extension",
"description": "MyExtension",
"icons": {
"16": "img/favicon.png",
"48": "img/48.png"
},
"version": "0.1",
"background": {
"scripts": ["js/content.js"],
"persistent": false
},
"permissions": [
"tabs", "https://*/*", "http://*/*"
],
"browser_action": {
"default_icon": "img/default_icon.png",
"default_title": "Get URL"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"all_frames": true,
"css": ["css/style.css"]
}],
"short_name": "GetURL"
}
以及我的 content.js
中的代码document.addEventListener('DOMContentLoaded', () => {
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
alert(tabs[0].url)
});
});
问题在于,该 URL 仅显示在第一个当前选项卡上,而不显示在另一个激活的选项卡上。我尝试将 currentWindow 更改为 lastFocusedWindow 并更改为 windowId 但它并没有解决问题。告诉我我做错了什么?
【问题讨论】:
-
当我从一个标签移动到另一个标签时
-
后台页面是一个单独的页面,在扩展内部有自己的DOM(与网页没有任何关系),见architecture overview,所以1)不需要DOMContentLoaded,它什么也不做2) 使用 chrome.tabs.onActivated,也 3) 不要使用具有误导性的名称
content.js作为背景/事件脚本。 -
事实证明,对于这个任务,我真的不需要后台脚本。对吧?
-
嗯,到目前为止的代码可以有效地替换为 内容脚本 中的
alert(location.href),但总体而言,这取决于您接下来要对 url 做什么。 -
其实不用脚本也可以高亮链接。只需使用您注入的 CSS。此外,对于不同的 URL 模式,您可以有许多内容脚本声明(
content_scripts是一个数组)。
标签: javascript google-chrome google-chrome-extension