【问题标题】:chrome extension - manifest version 2chrome 扩展 - 清单版本 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 服务。现在它不起作用。我很确定它与新的清单版本有关,但我怎样才能再次启用跨域脚本?

【问题讨论】:

    标签: google-chrome-extension


    【解决方案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 列入白名单时,您可以发出跨域请求。
      猜你喜欢
      • 2012-08-02
      • 2012-09-03
      • 2012-08-04
      • 2020-11-28
      • 1970-01-01
      • 2021-10-16
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多