我已经研究这个问题几个小时了,我读了很多文章,但仍然无法弄清楚。 这是交易。
我正在使用 Chrome 扩展程序,我想调用我的服务器来返回一个 js 对象。我不想将其注入(inject)页面,但我希望能够在我的内容脚本中使用它。
注意:我不能使用 eval() (我已经尝试过了)并且我不能使用 jsonp
我正在使用一个框架,因此我的 header 未在此处设置,但它们设置为返回应用程序类型 application/javascript utf-8;
我的 php 端看起来像这样:
$refererObj = 'var refererObj = {
myFunc: function () {
console.log("hello");
}
};';
echo $refererObj;
我的js看起来像这样
$.ajax({
url: myUrl,
crossDomain: true,
data: postData,
dataType: "json",
type: "POST",
}).done(function(data){
eval(data);
console.log(data);
console.log(refererObj);
});
第一个 console.log 给出 ["varrefererObj = {↵ getProducts: function () {↵…(products);↵ console.log("hello");↵ }↵};"]
第二个给出“Uncaught ReferenceError:refererObj未定义”
我得到了带有 javascript 对象的字符串形式的响应,一切都很好,直到我真正想将字符串“转换”为可用的代码。
任何帮助都会非常好。
谢谢
最佳答案
如果您relax the default Content Security Policy,您实际上可以使用
eval()
与unsafe-eval
。但最好避免使用大锤子。您可以再次使用 JSONP,如果您可以通过 https 服务器提供服务并且 add it to
script-src
内容安全政策。这样的安全风险稍微小一些。
我怀疑是否还有其他解决方案:您从外部服务器加载的任何内容都将被视为受到污染,如果您找到了执行它的方法 - 恭喜您,您刚刚绕过了 Chrome 中的 CSP,应该去领取您的错误赏金。
请注意,如果是简单的 JSON 数据,则毫无意义,您只需使用 XHR 和 JSON.parse
加载它即可。但您的示例包含代码。
关于javascript - 如何使用ajax从php返回javascript对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23817884/