好的,所以这是我的问题:
在我的家用电脑上,我安装了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,所以我改回来,同时进行你建议的更改。
答案 0 :(得分:1)
您收到的错误是在 manifest.json 中要求"manifest_version": 2
媒体资源。所以,至少你需要:
"version": 2
更改为"version": "2"
(版本必须是字符串值)。"manifest_version": 2
( 2 不带引号 - 这是一个数字值。)"background_page": "storage.html",
更改为"background": {"page": "storage.html"},
。请注意,某些功能可能会中断并需要重构(为了符合清单v2)。
<强>更新强>
事实证明,为了使扩展能够与 Manifest V2 (和功能性)兼容,需要更改一些内容。重要的是在此处发布代码或详细列出每一个修改,因此我将尝试总结并关注修改的“性质”(请参阅下面的更新源代码的链接):< / p>
问题的主要来源是适用于Google Chrome扩展程序的新 Content Security Policy (CSP) 不允许eval
和内联脚本/事件监听器。为了避免这种情况,必须进行以下更改:
在清单中声明允许eval
的CSP
("content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
)。
不幸的是(?)没有办法放宽针对内联脚本的策略。
在后台页面(即storage.html
中,使用了内联脚本,因此我最终将代码移动到外部文件(background.js
)并包含这样的JS脚本:
"background": { "persistent": true, "scripts": [ "js/bscode.js", "js/background.js" ] },
旧的jquery-1.4.4
(依赖于内联脚本)也是不行的。所以我不得不替换为较旧的jquery-1.7.2
(我尝试使用最新版本的jquery
和jquery-ui
,但是它们与其余代码的效果不佳,所以我回滚到不依赖于内联脚本的最旧版本。此更改同时影响content_scripts
声明和bscode.html
(定义和编辑用户定义的宏)。
迁移到jquery-1.7.2
需要使用.live()
将所有已弃用的.on()
移植到等效语法中。 (幸运的是,这只影响了一个文件:chrome-ui.js
)
bscode.html
有2个内联脚本需要移动到外部文件(并放置在正文中的正确位置,因为代码调用document.write
。
bscode.html
有很多内联事件侦听器,这是行不通的。此外,元素(也包含内联事件侦听器)被动态插入到DOM中,因此解决方案也必须考虑到这一点。
我通过使用外部JS文件来解决这两个问题,该文件利用 MutationObserver 来监听节点插入并将任何内联事件侦听器转换为“附加”事件侦听器(通过{{1 }})。
最后,为了简化操作,我将addEventListener()
设置为扩展程序的bscode.html
,以便您可以从Options Page
页面快速启动它。
(我希望我没有留下任何东西......)
可以下载 here 的扩展源代码(我可以告诉您完整的功能)