【发布时间】:2011-10-08 13:06:05
【问题描述】:
我是 chrome 扩展的新手。
我想创建一个简单的 chrome 扩展,它会弹出带有当前 html 页面标题的警报。
当我正在执行时:alert(document.title),我没有得到它,因为文档对象不属于页面而是属于扩展脚本(是否正确?)
如何获得正确的文档对象?
【问题讨论】:
标签: javascript google-chrome-extension
我是 chrome 扩展的新手。
我想创建一个简单的 chrome 扩展,它会弹出带有当前 html 页面标题的警报。
当我正在执行时:alert(document.title),我没有得到它,因为文档对象不属于页面而是属于扩展脚本(是否正确?)
如何获得正确的文档对象?
【问题讨论】:
标签: javascript google-chrome-extension
内容脚本是最简单的方法:
使用此代码扩展您的清单文件:
...
"content_scripts": [
{
"matches": ["http://urlhere/*"],
"js": ["contentscript.js"]
}
],
...
内容脚本(在清单文件matches 中提到的每个页面上自动执行):
alert(document.title)
与chrome.extension.* 方法相比,使用内容脚本的优势在于您的扩展不需要可怕的权限,例如tabs。
【讨论】:
"*":"matches": ["*"],
"matches": ["http://*/*"], 以使其根据code.google.com/chrome/extensions/match_patterns.html 工作,否则我得到Missing scheme separator 我还没有尝试过,但至少上传了扩展名。再次感谢。
您可以使用tabs module:
chrome.tabs.getCurrent(function(tab) {
alert(tab.title);
});
【讨论】:
对于你正在做的所有你需要做的就是这个
chrome.tabs.executeScript({
code: 'alert(document.title)'
})
Chrome.tabs.executeScript 允许您在当前页面而不是扩展程序中运行 JavaScript。所以这工作得很好,但如果你想稍后在更复杂的扩展中使用页面的名称,而不是我会做 pimvdb 所做的事情
【讨论】:
unsafe-eval 添加到CSP 吗?
我使用这个扩展来做类似的事情:
main.js:
(function(){window.prompt('Page title:', document.title)})()
manifest.json:
{
"background": {"scripts": ["background.js"]},
"browser_action": {
"default_title": "popup_title"
},
"name": "popup_title",
"description": "Display the page title for copying",
"permissions": [
"tabs",
"http://*/*",
"https://*/*"
],
"version": "1.0",
"manifest_version": 2
}
background.js:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(tab.id, {file: "main.js"})
});
【讨论】: