Chrome扩展程序将标签重定向到我的页面

时间:2014-02-09 06:23:32

标签: javascript json google-chrome google-chrome-extension

我是Chrome扩展程序的新手,在编写我的第一个chrome扩展程序时遇到了麻烦。我要做的是检测新的标签操作并重定向到预定义的(我的网页)网址。

我写了manifest.json和background.html,但似乎没有用。 我浏览了关于功能以及如何使用它们的谷歌论文,但必须有一些我错过的东西。

我不太了解我在这里做过的很多事情,例如manifest.json中的内容脚本。

一些帮助解决这个问题将不胜感激。

修改

Error

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文件的来源。 截图: Output

为什么脚本没有被执行?

3 个答案:

答案 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" ]

}