利用window.name+iframe跨域获取接口数据
最近做了一个表单广告,需要从接口读取数据,做完发现谷歌火狐下正常,360兼容和IE浏览器无法获取数据,以下是鲜明的对比:
调试发现报错了:
然后开发把接口改成支持windowname,一开始有点懵,什么是windowname?还好,开发还发了使用例子给我,看了是利用了iframe去加载数据,还是有些地方看不懂,于是问度娘,看完这个就略懂了:http://www.cnblogs.com/zichi/p/4620656.html,禁不住感叹原来还有这种方式。
下面贴出我的代码:
function domainData(url, fn) { var isFirst = true; var iframe = document.createElement('iframe'); iframe.style.display = 'none'; var loadfn = function(){ if(isFirst){ iframe.contentWindow.location = 'proxy.html'; //该html文件要与调用该方法的页面在同一域名,目录下,不然还是失败 isFirst = false; } else { var data = eval('(' + iframe.contentWindow.name + ')'); fn(data); iframe.contentWindow.document.write(''); iframe.contentWindow.close(); document.body.removeChild(iframe); iframe.src = ''; iframe = null; } }; iframe.src = url; if(iframe.attachEvent){ iframe.attachEvent('onload', loadfn); } else { iframe.onload = loadfn; } document.body.appendChild(iframe); } //调用 domainData("http://play9.pcbaby.com.cn/baby170217/action/getProductType.jsp?windowname=1", function(data){ if(data.code == 1){ console.log(data); } });
欢迎大家来浏览我的博客,如发现我有写错的地方,欢迎交流指正。