由于JSONP请求是以以下方式创建的:
var script=document.createElement('script');
script.src='url';
script.onLoad=function(){dosomething()};
document.body.appendChild(script);
我的问题是,是否有像onBeforeLoad这样的w3c标准、跨浏览器支持的事件,它反过来让我们停止执行下载的脚本,以防它不是一个格式良好的JSONP响应,或者它没有通过一些预定义的方案验证,或者它由一些有害代码组成(基本脚本验证)?我知道一些浏览器支持onBeforeLoad事件,但主要关注下载的脚本数据源以及上述任何原因,跨浏览器访问加载脚本源是非常有用的,在执行开始之前停止执行的可能性。
例如,上面的脚本可能如下:
var script=document.createElement('script');
script.src='url';
script.onBeforeLoad=function(){
if(json.parseJson(this.dataSource) &&
json.validateAgainst(schema,this.dataSource))
{
return false;
}
else{
return true;
}
};
//if onBeforeLoad return true, onLoad will not be fired;
script.onLoad=function(){dosomething()};
document.body.appendChild(script);
我知道JSONP完全是关于对第三方javascript模块的信任,因此我有时希望我能在使用它之前验证这些模块。
如果您想检测JSONP响应是否大于您期望的JSONP,那么不,这是不可能的。
如果您能够读取响应,那么首先就不需要JSONP。因为使用JSONP的主要原因是为了规避同源策略对访问XHR请求响应或通过DOM的限制。XHR的扩展(以前称为XHR Level 2)通过支持CORS规范来允许跨源请求,由于浏览器和/或服务器缺少支持,该扩展可能不适用。
这是JSONP的主要安全问题:您需要信任服务器。