我是Chrome扩展程序的新手,在编写我的第一个chrome扩展程序时遇到了麻烦。我要做的是检测新的标签操作并重定向到预定义的(我的网页)网址。
我写了manifest.json和background.html,但似乎没有用。 我浏览了关于功能以及如何使用它们的谷歌论文,但必须有一些我错过的东西。
我不太了解我在这里做过的很多事情,例如manifest.json中的内容脚本。
一些帮助解决这个问题将不胜感激。
修改的
EDIT2 这是更新的代码 现在我没有background.html文件。 的manifest.json
{
"name": "Tabber",
"manifest_version" : 2,
"version": "1.0",
"description": "MyExtension",
"background" : {
"scripts": ["code.js"]
},
"chrome_url_overrides": {
"newtab": "code.js"
},
"permissions": [
"tabs"
]
}
code.js
<script>
chrome.browserAction.onClicked.addListener(function(tab){
var action_url = "www.xyz.com"
chrome.tabs.create({ url: action_url });
}
</script>
现在,当我打开一个新标签时,我会看到显示的.js文件的来源。 截图:
为什么脚本没有被执行?
答案 0 :(得分:9)
如果你想超越默认页面,你应该使用html文件,而不是js文件。 如果您只想过度翻页,则不需要任何后台页面或内容脚本。 以下是示例代码:
menifest.json:
{
"name": "Tabber",
"manifest_version" : 2,
"version": "1.0",
"description": "MyExtension",
"chrome_url_overrides": {
"newtab": "my.html"
},
"permissions": [
"tabs"
]
}
my.html:
<!DOCTYPE html>
<html>
<head>
<title>over ride page</title>
<script type="text/javascript" src="code.js">
</script>
</head>
<body>
</body>
</html>
code.js:
window.open("http://www.google.com", "_self");
注意:你不能在你的html文件中写任何js。你需要在html文件中包含js文件。
而且,您甚至不需要任何js文件。只需修改my.html:
<head>
<meta http-equiv="refresh"content="0;URL=http://www.google.com">
</head>
答案 1 :(得分:2)
使用新的Chrome扩展程序,您不应在后台页面中放置任何脚本代码。
不允许使用内联脚本和事件处理程序
由于使用了内容安全政策,您无法再使用 与HTML内容内联的标记。这些必须是 转移到外部JS文件。此外,内联事件处理程序是 也不支持。例如,假设您有以下代码 你的扩展名:
https://developer.chrome.com/extensions/tut_migration_to_manifest_v2.html#inline_scripts
你应该做的是将你的代码移动到一个js文件,或者设置 将背景属性显示为js文件或具有背景页面 链接到外部js文件并将所有js代码放在那里......
尝试使用背景属性:http://developer.chrome.com/extensions/background_pages.html
1)基本上将您的清单添加到后台脚本(您现在不需要扩展的后台页面)
background : {
"scripts": ["background.js"]
}
2)然后将一个background.js添加到您的扩展目录并将所有js代码放在那里..
然后再试一次,看看扩展是否有效:)
3)从js文件中删除所有html,并将你的js放在background.js中
chrome.browserAction.onClicked.addListener(function(tab){
var action_url = "www.xyz.com"
chrome.tabs.create({ url: action_url });
}
答案 2 :(得分:0)
将此人添加到您的manifest.json文件中。
"chrome_url_overrides": {
"newtab": "index.html"
}
将index.html替换为您的网页。这样就可以在打开新标签而不是默认标签时显示index.html。
我有一个基本上做同样事情的扩展。这是我可以用作参考的manifest.json。
{
"name": "appName",
"version": "0.1",
"manifest_version": 2,
"chrome_url_overrides": {
"newtab": "index.html"
},
"description": "Desc Here",
"icons": {
// "128": "icon128.png"
},
"content_scripts": [ {
"css": ["css/styles.css"],
"js": [ ],
"matches": [ "*://*/*" ],
"run_at": "document_start"
} ],
"minimum_chrome_version": "18",
"permissions": [ "http://*/*", "https://*/*", "cookies", "tabs", "notifications" ]
}