手动安装扩展的问题

时间:2013-12-05 04:23:20

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

好的,所以这是我的问题:

在我的家用电脑上,我安装了Google Chrome扩展程序 - WXFZ的\ Code。这个扩展工作完美,我每天都用它来工作。但是,我猜开发人员放弃了它,因为它无法再在Google扩展程序下载页面上找到。

我正在尝试将该扩展程序从家用计算机转移到我的办公室计算机上。我的工作计算机上有扩展文件夹,我尝试将其拖放到扩展页面进行安装,但收到错误:

“无法从'U:\ Downloads \ pekinghlicdifnlgafajjohhoiochfdh \ 2.1_0'加载扩展名。'manifest_version'键必须存在并设置为2(不含引号)。请参阅developer.chrome.com/extensions/manifestVersion.html有关详细信息。“

我不完全确定这意味着什么,但我已经复制了以下清单文件夹的内容。我已尝试在清单文件中更改一些内容,但没有任何方法可行:/

{
   "app": {
      "launch": {
         "local_path": "bscode.html"
      }
   },
   "background_page": "storage.html",
   "content_scripts": [ {
      "all_frames": true,
      "js": [ "js/jquery-1.4.4.min.js", "js/bscode.js", "js/bscode-cs.js" ],
      "matches": [ "http://*/*", "https://*/*" ]
   } ],
   "description": "Simple \\code and \\\\macro engine for common web-forms.",
   "icons": {
      "128": "icon_128.png",
      "16": "icon.png",
      "48": "icon_48.png"
   },
   "key":        "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClVb9xGcyZp3P4Fe+rpjGUqVrvRq8rqQl278gMjFzmxqD65cu7uf/erOBlFWbAc6YK15yvgnsYn+HDYvoSV4shajLAnytek7CI35nia5AnYACJsXW+JrfoT9pEgK9Zd4fE1XFr8bNCzhwKeoupH+gtMdvJ9lqAN4Xj/Tam5+QvzQIDAQAB",
   "name": "wxfz\u2019s \\code",
   "permissions": [ "http://*/*", "https://*/*", "tabs" ],
   "update_url": "http://clients2.google.com/service/update2/crx",
   "version": 2
}

对这个问题有任何建议,我很感激。就像我说的,扩展仍然有效;我假设必须有办法让它在我的另一台计算机上运行:/

更新

道歉,更新的源代码是:

{
   "app": {
      "launch": {
         "local_path": "bscode.html"
      }
   },
   "background_page": "storage.html",
   "content_scripts": [ {
      "all_frames": true,
      "js": [ "js/jquery-1.4.4.min.js", "js/bscode.js", "js/bscode-cs.js" ],
      "matches": [ "http://*/*", "https://*/*" ]
   } ],
   "description": "Simple \\code and \\\\macro engine for common web-forms.",
   "icons": {
      "128": "icon_128.png",
      "16": "icon.png",
      "48": "icon_48.png"
   },
   "key":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClVb9xGcyZp3P4Fe+rpjGUqVrvRq8rqQl278gMjFzmxqD65cu7uf/erOBlFWbAc6YK15yvgnsYn+HDYvoSV4shajLAnytek7CI35nia5AnYACJsXW+JrfoT9pEgK9Zd4fE1XFr8bNCzhwKeoupH+gtMdvJ9lqAN4Xj/Tam5+QvzQIDAQAB",
   "name": "wxfz\u2019s \\code",
   "permissions": [ "http://*/*", "https://*/*", "tabs" ],
   "update_url": "http://clients2.google.com/service/update2/crx",
   "version": "2.1"
   "manifest_version": 2

}

在原帖中我有:

"version": 2

我现在看到这是不正确的,它应该是2.1,所以我改回来,同时进行你建议的更改。

1 个答案:

答案 0 :(得分:1)

您收到的错误是在 manifest.json 中要求"manifest_version": 2媒体资源。所以,至少你需要:

  1. "version": 2更改为"version": "2"版本必须是字符串值)。
  2. 添加"manifest_version": 2 2 不带引号 - 这是一个数字值。)
  3. "background_page": "storage.html",更改为"background": {"page": "storage.html"},
  4. 请注意,某些功能可能会中断并需要重构(为了符合清单v2)。


    <强>更新

    事实证明,为了使扩展能够与 Manifest V2 (和功能性)兼容,需要更改一些内容。重要的是在此处发布代码或详细列出每一个修改,因此我将尝试总结并关注修改的“性质”(请参阅​​下面的更新源代码的链接):< / p>

    问题的主要来源是适用于Google Chrome扩展程序的新 Content Security Policy (CSP) 不允许eval和内联脚本/事件监听器。为了避免这种情况,必须进行以下更改:

    1. 在清单中声明允许eval的CSP ("content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'")。
      不幸的是(?)没有办法放宽针对内联脚本的策略。

    2. 在后台页面(即storage.html中,使用了内联脚本,因此我最终将代码移动到外部文件(background.js)并包含这样的JS脚本:

      "background": {
         "persistent": true,
         "scripts": [
             "js/bscode.js",
             "js/background.js"
         ]
      },
      
    3. 旧的jquery-1.4.4(依赖于内联脚本)也是不行的。所以我不得不替换为较旧的jquery-1.7.2(我尝试使用最新版本的jqueryjquery-ui,但是它们与其余代码的效果不佳,所以我回滚到不依赖于内联脚本的最旧版本。此更改同时影响content_scripts声明和bscode.html(定义和编辑用户定义的宏)。

    4. 迁移到jquery-1.7.2需要使用.live()将所有已弃用的.on()移植到等效语法中。 (幸运的是,这只影响了一个文件:chrome-ui.js

    5. bscode.html有2个内联脚本需要移动到外部文件(并放置在正文中的正确位置,因为代码调用document.write

      < / LI>
    6. bscode.html有很多内联事件侦听器,这是行不通的。此外,元素(也包含内联事件侦听器)被动态插入到DOM中,因此解决方案也必须考虑到这一点。
      我通过使用外部JS文件来解决这两个问题,该文件利用 MutationObserver 来监听节点插入并将任何内联事件侦听器转换为“附加”事件侦听器(通过{{1 }})。

    7. 最后,为了简化操作,我将addEventListener()设置为扩展程序的bscode.html,以便您可以从Options Page页面快速启动它。

      (我希望我没有留下任何东西......)

      可以下载 here 的扩展源代码(我可以告诉您完整的功能)