chrome 扩展 - 清单版本 2

Posted

技术标签:

【中文标题】chrome 扩展 - 清单版本 2【英文标题】:chrome extension - manifest version 2 【发布时间】:2012-08-02 14:19:45 【问题描述】:

我有一个 chrome 扩展,它引用了 jquery 文件。 这是我的弹出 html(只有 head 标签):

<head>
    <title>My Extention</title>
    <script type="text/javascript" src="http://www.MySite.com/Resources/JS/JQuery/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="MyExtensionScript.js"></script>
</head>

所以在“MyExtensionScript.js”中,我认为我可以使用 jquery,但显然 $ 函数没有定义。 这是我的 manifest.json 文件:


  "name": "My Test Extension",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Test version of My Extension",
  "browser_action": 
    "default_icon": "test.ico",
    "default_popup": "Test.html"
  ,
  "permissions": [
    "cookies",
    "tabs",
    "<all_urls>"
  ]

在清单的版本 1 中它可以工作,但现在不行。我尝试使用“web_accessible_resources”并向其中添加“http://www.MySite.com/Resources/JS/JQuery/jquery-1.7.2.min.js”,但这也不起作用。有什么想法吗? 另外,我有一个脚本注入到当前页面并向我返回一条消息(在我的情况下是当前页面的一些 html 源),这种行为是否会受到转换到清单版本 2 的影响? 谢谢大家:)

编辑:我有一个启用跨域脚本(使用 JSONP)的 Web 应用程序。在我的扩展中,我有一个脚本在我的站点中使用 $.getJSON 调用 Web 服务。现在它不起作用。我很确定它与新的清单版本有关,但我怎样才能再次启用跨域脚本?

【问题讨论】:

【参考方案1】:

我只是在我的内容脚本中包含 jquery。只要确保在你的脚本之前加载它。


  "manifest_version": 2,
  "default_title": "Babble",
  "version": "1.2",
  "description": "Chat in your language with friends in their language",
  "default_locale": "en",
  "default_icons": 
    "16": "img/icon16.png",
    "48": "img/icon48.png",
    "128": "img/icon128.png"
  ,

  "content_scripts":[
    
        "matches": ["http://mail.google.com/*", "https://mail.google.com/*"],
        "css" : ["css/style.css"],
        "js" : ["js/jquery.js" , "js/translate.js" , "js/jquery.cookie.js"]
    
  ]

【讨论】:

【参考方案2】:

您需要使用本地存储在扩展程序中的 jQuery 文件,而不是从您的站点中引用。

这是由于 Chrome 严格的Content Security Policy 只允许执行本地脚本,没有内联代码。

Web Accessible Resources 是在您的扩展程序中 可以从 Web 访问的文件,而不是您的扩展程序可以访问的 Web 上的资源。例如,如果您想使用存储在扩展程序中的图像更改页面的背景图像,则必须将该图像添加到清单中 web_accessible_resouces 的列表中。

清单版本的更改不应影响您的内容脚本,除非它们执行了不再允许的操作。您可以从 Chrome manifestVersion 文档中查看其他更改。

【讨论】:

https资源可以加入白名单,但还是建议将脚本打包成扩展。 @RobW - 我如何将 http 资源列入白名单,为什么仍然建议将脚本与扩展一起打包? @GilTankus http 资源不能被列入白名单(因此我说“https”)。重新打包:假设用户与互联网断开连接。然后,当资源在外部时,您的扩展程序将无法工作。 @Robw - 非常感谢您的解释。我同意并且我将所有资源打包在扩展文件夹中。关于如何使用 $.getJSON 从我的扩展向我的服务器发送请求(我的服务器支持跨域脚本 - JSONP)的任何想法? @GilTankus JSONP 无法使用,但在 Chrome 扩展程序中,当您在清单文件的权限部分将 URL 列入白名单时,您可以发出跨域请求。

以上是关于chrome 扩展 - 清单版本 2的主要内容,如果未能解决你的问题,请参考以下文章

带有清单版本 3 的 CORS Chrome 扩展程序

Opera扩展清单文件

Chrome扩展程序已损坏

干货Chrome插件(扩展)开发全攻略

干货Chrome插件(扩展)开发全攻略

web_accessible_resources 的 Chrome 扩展清单问题(已阻止)