我有一个镀铬扩展,其对象看起来像这样:
someFunctions = {
'a': function() {
doStuff();
},
'b': function() {
doOtherStuff();
}
}
目前,我的扩展需要每次更新someFunctions需要一个新功能。这可能令人难以置信地令人沮丧,因为我的扩展已从someFunctions中的2个函数跳转到21,每次都需要新的更新。
我想从我的域外部加载此对象,因此我的扩展程序不需要任何新的更新来修复潜在的错误或小错误。这样做的最佳方法是什么?我想避免将我的域添加到清单中的权限列表或增加扩展中的权限 - 我不需要加载整个.js - 只是一些函数。
我想避免将代码重构为一些奇怪的JSON对象而反对使用eval()
。
答案 0 :(得分:1)
通常,由于默认的内容安全策略,您将无法这样做。
但是,只要您通过HTTPS提供文件,就可以放宽此政策(这是尝试和阻止MITM的安全要求)。
具体来说,假设您的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排序