如何在Chrome扩展程序中包含外部对象?

时间:2015-02-11 00:15:24

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

我有一个镀铬扩展,其对象看起来像这样:

someFunctions = {
    'a': function() {
        doStuff();
    },
    'b': function() {
        doOtherStuff();
    }
}

目前,我的扩展需要每次更新someFunctions需要一个新功能。这可能令人难以置信地令人沮丧,因为我的扩展已从someFunctions中的2个函数跳转到21,每次都需要新的更新。

我想从我的域外部加载此对象,因此我的扩展程序不需要任何新的更新来修复潜在的错误或小错误。这样做的最佳方法是什么?我想避免将我的域添加到清单中的权限列表或增加扩展中的权限 - 我不需要加载整个.js - 只是一些函数。

我想避免将代码重构为一些奇怪的JSON对象而反对使用eval()

1 个答案:

答案 0 :(得分:1)

通常,由于默认的内容安全策略,您将无法这样做。

但是,只要您通过HTTPS提供文件,就可以放宽此政策(这是尝试和阻止MITM的安全要求)。

阅读CSP documentation

具体来说,假设您的JS文件是https://example.com/awesome.js。你无法逃脱“我不需要加载整个.js - 只是一些功能”,如果代码包含函数,Chrome需要评估你的代码。

您需要在清单中将其添加到您的CSP:

"content_security_policy": "script-src 'self' https://example.com; object-src 'self'"

我认为您不能通过清单包含外部脚本(但欢迎您尝试,这会很有趣);如果HTML页面像弹出窗口一样,您只需在其中加入<script>标记。

否则,您可以通过以编程方式创建eval标记并将其添加到页面来避免使用<script>。对于内容脚本,您应该使用AJAX / eval(或使用{code: "..."} tabs.executeScript形式的eval排序