我的问题是关于 Apps CSP https://developer.mozilla.org/en-US/Apps/CSP
这里说所有远程脚本、内联脚本、javascript URI 和其他安全问题都不会在 Firefox OS 应用程序上工作。
因此,我尝试下载我的应用程序(Flurry 和广告服务)所必需的脚本,但两者都无法在设备上运行。我调用电话的方式是使用 AJAX,这样我就可以避免这两个脚本都包含的远程和内联脚本。在模拟器中运行完美,但在设备上,广告从不显示,Flurry session 也从不启动。
这是我为 Flurry 进行 AJAX 调用的代码部分:
$.ajax({
url: 'https://cdn.flurry.com/js/flurry.js',
dataType: "script",
xhrFields: {
mozSystem: true
},
success: function(msg){
console && console.log("Script de Flurry: luego de la descarga en AJAX "+msg);
flurryLibrary = true;
FlurryAgent.startSession("7ZFX9Z4CVT66KJBVP7CF");
},
error:function(object,status,errortxt){
console && console.log("The script wasn't downloaded as text. The error:" +errortxt);
flurryLibrary = false;
},
always: function(object,status,errortxt){
console && console.log("The script may or may not be downloaded or executed. The error could be:" +errortxt);
}
});
在我的应用程序中,我使用 systemXHR 权限并使用此行调用其他网站:
request = new XMLHttpRequest({ mozSystem: true });
这与在 AJAX 调用中使用 xhrFields{mozSystem:true} 相同。
我相信这不是跨域问题,因为在我的应用程序的其余部分中,我调用了不在我的域中的 xml 文件,并且调用成功返回。
那么,我的问题是,Firefox OS 应用程序可以执行通过 AJAX 下载的脚本吗?有办法解决这个问题吗?
感谢您的宝贵时间。
PS:我忘了补充一点,我的应用程序是特权的,以防万一你问
最佳答案
我认为这是一项安全功能,对您的问题的简短回答是否定的。引用您链接到自己的 CSP 文档:
You cannot point a at a remote JavaScript file. This means that all JS files that you reference must be included in your app's package.
如果您从远程服务器使用 ajax 加载 JS 文件,则该 JS 文件不会包含在您的应用程序包中。您应该小心遵守 CSP 限制。在不完全遵守 CSP 的情况下进行开发时,有可能在模拟器甚至手机中让很多东西正常工作,但这并不意味着它就可以了。当您将来向任何可靠的市场(例如 Firefox Marketplace)提交您的应用程序时,将对其进行仔细审查以确保它不违反 CSP 限制。作为一般经验法则,我会说任何动态评估 JS 代码的尝试都将存在安全风险,并且很可能会被 CSP 法规禁止。
关于javascript - 在 Firefox OS 设备上通过 AJAX 执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052670/