我试图通过xhr获取http:// javascript文件,但我遇到了上面提到的错误。
这是我的代码:
function getXHR() {
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (is_chrome) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var s = document.createElement('script');
s.textContent = xhr.responseText;
(document.head||document.documentElement).appendChild(s);
s.parentNode.removeChild(s);
}
}
xhr.send();
}
}
这仅适用于Chrome,因为我想在https://中使用该脚本,但Chrome会自动阻止http://中的任何内容。我从中获取脚本的服务器不运行https://并且我需要脚本/有多个脚本我不想全部复制到数据文件中。
我遇到的错误:
XMLHttpRequest cannot load http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true. Origin https://mysite.com is not allowed by Access-Control-Allow-Origin.
答案 0 :(得分:4)
只需直接插入<script>
标记,而不是此XHR包装,然后将内容插入<script>
标记。
function getScript() {
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (is_chrome) {
// generate script element and set its source
var s = document.createElement('script');
s.src = "http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true";
// remove the script element after loading
s.addEventListener( 'load', function(){ s.parentNode.removeChild(s); } );
(document.head||document.documentElement).appendChild(s);
}
}
此外,我不知道,为什么你在加载后尝试删除脚本元素。这不会影响在该代码中创建的任何对象/方法/变量。
答案 1 :(得分:3)
我将服务器文件的完整路径更改为短路径,如下所示。
$.post('http://example.com/pages/loadRandomImages.php',{'type':'loadRandomImages','loadingReq':'True'},function(data){
------------
----------
});
将其更改为,
$.post('/pages/loadRandomImages.php',{'type':'loadRandomImages','loadingReq':'True'},function(data){
------------
----------
});
然后用铬工作得很好。
答案 2 :(得分:1)
浏览器的块XHR请求发送到与发出请求的页面的服务器不同的服务器,以用于与跨站点脚本相关的安全性目的。
如果它只是您要加载的脚本,请使用
<script src="..."></script>
对于一般XHR,您可以使用jsonp解决方法,如果api提供它,或者要求API的运营商启用CORS(跨源资源共享)
http://developer.chrome.com/extensions/xhr.html https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS http://www.w3.org/TR/cors/ http://en.wikipedia.org/wiki/JSONP