如果您在弹出窗口、后台或选项页面中,有一种间接的方法可以获取页面的域。
您可以参考以下代码作为参考。
演示
manifest.json
在清单文件中注册内容脚本、后台和弹出窗口脚本,同时申请相关权限。
{
"name": "Domain Name",
"description": "https://dev59.com/8m7Xa4cB1Zd3GeqPoEl1",
"version": "1",
"manifest_version": 2,
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"myscript.js"
]
}
],
"browser_action": {
"default_popup": "popup.html"
},
"background": {
"scripts": [
"background.js"
]
},
"permissions": [
"tabs",
"<all_urls>"
]
}
myscript.js
console.log(document.domain)
弹出窗口.html
注册popup.js
以绕过内容安全策略。
<html>
<head>
<script src="popup.js"></script>
</head>
<body></body>
</html>
popup.js
为 DOM 内容加载完成
添加事件监听器,并获取用户所在标签页的活动 URL。
document.addEventListener("DOMContentLoaded", function () {
console.log(document.domain);
chrome.tabs.query({
"active": true,
"currentWindow": true,
"status": "complete",
"windowType": "normal"
}, function (tabs) {
for (tab in tabs) {
console.log(tabs[tab].url);
}
});
});
background.js
console.log(document.domain);
chrome.tabs.query({
"active": true,
"currentWindow": true,
"status": "complete",
"windowType": "normal"
}, function (tabs) {
for (tab in tabs) {
console.log(tabs[tab].url);
}
});
输出
在所有扩展页面中,使用console.log(document.domain)将会得到以下输出:
fgbhocadghoeonlokakijhnlplgkolbg
而对于tabs.query()
的输出,则为:
http://somedomain.com/
然而,内容脚本输出始终为:
http://somedomain.com/
参考文献
window.top.location
怎么样? - Eliran Malkawindow.top.location
不断输出chrome-extension://(the app id)/popup.html
。 - hellomello