2011-11-02 32 views
-2

我正在研究一个可以通过其他扩展进行扩展的模块化扩展。我正在寻找一种方法来读取扩展的manifest.json或者一个自定义文件,比如widgets.json。阅读另一个Chrome扩展程序的manifest.json

我试过this,即使允许<all_urls>,但不幸的是面临着这样的错误:

XMLHttpRequest cannot load chrome-extension://aknpkdffaafgjchaibgeefbgmgeghloj/manifest.json. Cross origin requests are only supported for HTTP.

有没有我可以在分机之间交换数据的小型,简单的比特任何其他方式?我目前使用chrome.extension.sendRequest,但这被证明是在background.html中的内存税。此外,它还使托管应用无法在其应用中嵌入小部件。

我非常感谢任何帮助。

注意:我也意识到jsonp是一个选项,但我宁愿不采取。恶意扩展可能很容易导致漏洞。

+0

您想从清单中读取哪个字段? – serg

+0

自定义字段,“窗口小部件”。我正在开发的扩展包含可由任何人创建的小部件。可悲的是,我目前的方法不适用于托管应用程序(chrome.extension.sendRequest)。 –

+0

如果您想让其他扩展程序和应用程序与您通话,可以让您的扩展程序具有“web_accessible_resources”下列出的html页面,接受消息并写入localStorage。其他扩展将创建一个iframe将该页面嵌入到其后台页面中,他们可以使用postMessage向其发送消息,并且该页面将写入消息localStorage。您的扩展后台页面可以从localStorage中读取消息。 – AgentME

回答

3

Malicious extensions could easily result in a vulnerability.

这正是为什么Chrome不允许一个扩展程序查看他人的花园。

因此不,铬不支持这一点。您有几种选择:

  1. 文件实现“扩展点”,让不同的扩展相互交谈而无需额外的外部服务器的增强请求。

  2. 在构建时共享数据:创建一个包含共享数据的骨架扩展,并使用相同的骨架构建所有“子”扩展。这意味着您必须同时部署所有扩展,并且它不允许您的扩展交换运行时数据,但它可能会有所帮助。

  3. 创建一个外部服务器,允许所有分机相互通话。可能不太现实,只是为了完整性。

+0

我真的不能看到能够读取另一个扩展的manifest.json的危害。而且,扩展本身可能会对用户访问的网站造成的伤害远远超过其他扩展,这已经是可能的。我真的不喜欢这些选项中的任何一个:“[我会继续尝试;必须有一种方法。 –