Javascript 获取当前选项卡的URL

Javascript 获取当前选项卡的URL,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,对于测试用例,我想尝试输出当前选项卡的URL。 Mymanifest.json 问题是,URL只显示当前第一个选项卡,而不显示另一个活动选项卡。我尝试将currentWindow更改为LastFocusedWidow和windowId,但没有解决问题。告诉我我做错了什么?请务必阅读以下内容。您不需要背景/事件页面,它在扩展中是一个完全独立的页面,具有自己的DOM(文档和窗口),与网页没有任何关系 您需要一个运行在网页旁边并可以直接访问其DOM的 manifest.json: "content_s

对于测试用例,我想尝试输出当前选项卡的URL。 Mymanifest.json

问题是,URL只显示当前第一个选项卡,而不显示另一个活动选项卡。我尝试将currentWindow更改为LastFocusedWidowwindowId,但没有解决问题。告诉我我做错了什么?

请务必阅读以下内容。您不需要背景/事件页面,它在扩展中是一个完全独立的页面,具有自己的DOM(文档和窗口),与网页没有任何关系

您需要一个运行在网页旁边并可以直接访问其DOM的

manifest.json:

"content_scripts": [{
    "matches": ["<all_urls>"],
    "all_frames": true,
    "js": ["js/content.js"],
    "css": ["css/style.css"]
}],
"content_scripts": [{
    "matches": ["<all_urls>"],
    "all_frames": true,
    "run_at": "document_end",
    "js": ["js/content.js"],
    "css": ["css/style.css"]
}],
在这里,您可以编写普通的JavaScript DOM代码并访问该网页

不需要DOMContentLoaded包装器,因为默认情况下内容脚本是在文档结束事件之后注入的。如果您需要在document_end准确地运行代码,而不是稍后,您可以在manifest.json中显式地指定它:

"content_scripts": [{
    "matches": ["<all_urls>"],
    "all_frames": true,
    "js": ["js/content.js"],
    "css": ["css/style.css"]
}],
"content_scripts": [{
    "matches": ["<all_urls>"],
    "all_frames": true,
    "run_at": "document_end",
    "js": ["js/content.js"],
    "css": ["css/style.css"]
}],
“内容脚本”:[{
“匹配项”:[“”],
“所有框架”:正确,
“运行时间”:“文件结束时间”,
“js”:[“js/content.js”],
“css”:[“css/style.css”]
}],

另一方面,
警报
是一种显示信息的适得其反的方式,因为它会阻塞浏览器UI。

当我从一个选项卡移动到另一个选项卡时,背景页面是一个单独的页面,在扩展中有自己的DOM(与网页没有任何关系),请参见,因此1)不需要加载DOMContentLoaded,它什么都不做,2)使用,另外3)不要在后台/事件脚本中使用误导性的名称
content.js
。对吗?到目前为止,在内容脚本中,代码可以有效地替换为
警报(location.href)
,但总体而言,这取决于您接下来要对url做什么。实际上,您可以在不使用脚本的情况下突出显示链接。只需使用您注入的CSS。另外,对于不同的URL模式,您可以有许多内容脚本声明(
content\u scripts
是一个数组,如您所见)。我调整了manifest.json,删除了后台,但console.log(location.href)不起作用假设您检查了devtools控制台面板,这只能表示内容脚本没有被注入。您需要重新加载页面。这是一个已知的问题,如果您希望扩展在安装/更新后立即生效,有一个解决方案可能会很有用。如果chrome.tabs.query不起作用,我如何为所有选项卡注入脚本?我尝试将我的content.js注入所有选项卡。但当我尝试使用:chrome.tabs.query获取所有选项卡时,我得到了错误“无法读取未定义的”属性“query”的“我需要获取所有选项卡”。如果内容和脚本无法使用ChromeAPI,如何实现这一点?
"content_scripts": [{
    "matches": ["<all_urls>"],
    "all_frames": true,
    "run_at": "document_end",
    "js": ["js/content.js"],
    "css": ["css/style.css"]
}],