【发布时间】:2020-01-03 16:14:47
【问题描述】:
最近的 jQuery 版本似乎在将标签附加到文档时尝试对脚本源发出自己的 AJAX 请求,例如:
var script = $('<script/>', { id: 're_c', type: 'text/javascript', src: 'https://www.google.com/recaptcha/api/js/recaptcha_ajax.js' });
$('head').append(script);
由于 SOP 而失败:
XMLHttpRequest cannot load https://www.google.com/recaptcha/api/js/recaptcha_ajax.js?legacy. Origin https://ark.dev.hypem.com is not allowed by Access-Control-Allow-Origin. jquery.js:7774
send jquery.js:7774
jQuery.extend.ajax jquery.js:7230
jQuery.extend._evalUrl jquery.js:5810
jQuery.fn.extend.domManip jquery.js:5605
jQuery.fn.extend.append jquery.js:5387
(anonymous function)
InjectedScript._evaluateOn
InjectedScript._evaluateAndWrap
InjectedScript.evaluate
Error: NETWORK_ERR: XMLHttpRequest Exception 101
看起来 domManip 触发了 jQuery._evalUrl(node.src)。
同时,$.getScript() 工作正常。
为什么会改变这种行为?为什么不直接将文字脚本标签写入文档,让浏览器正常加载外部资源?我做错了吗?
【问题讨论】:
-
看起来它的设计目的是什么? api.jquery.com/jQuery.ajaxTransportAPI 文档中提到过。
-
您提供的代码使用
jQuery 2.1对我来说效果很好。在IE 11、Firefox 26和Chrome 32上进行了测试。您使用了哪个版本的jQuery,您尝试过哪些浏览器?