前端开发

 首页 > 前端开发 > javascript > Javascript通过创建iframe异步加载解决跨域问题

Javascript通过创建iframe异步加载解决跨域问题

分享到:
【字体:
导读:
          本文讲解Javascript通过创建iframe异步加载解决跨域问题 很多情况下广告的同步加载会影响大主页面的加载,导致主页面的onload事件的执行被延迟,这里提供了一个简单的异步加载广告的...

本文讲解Javascript通过创建iframe异步加载解决跨域问题

很多情况下广告的同步加载会影响大主页面的加载,导致主页面的onload事件的执行被延迟,这里提供了一个简单的异步加载广告的方法。


例如a.html为主页面

XML/HTML代码


  
  
  
    test page  
      
      
      
    
       

广告位之前内容

              

广告将会异步加载:

                     
              

我在广告位之后,但广告位不会影响我加载

       
         

 


 


下面是z.js的代码:

Java代码


    (function(d) {  
        document.write('
');           var iframe = document.getElementById('adbox').appendChild(d.createElement('iframe'));           doc = iframe.contentWindow.document;           iframe.style.cssText = "width:300px;height:250px;";           doc.open().write('');           doc.close();       })(document);

 


主要的思路就是同步创建一个DIV,这个基本上对页面加载的影响可以忽略。然后通过异步的方式向这个DIV中追加一个iframe,由这个iframe负责加载广告内容,并且这个iframe的加载方式同样也是异步方式,不会影响到主页面的load。


 


下面看一下22.js文件,无外乎就是处理请求,抛出素材,这里简化下,直接向iframe的body内赋值。

Java代码


    //var e = document.createElement("input");  
    //e.type = "button";  
    //e.value = "点我";  
    //document.body.appendChild(e);  
    //或者通过上面的appendChild进行节点添加,但是切记不要用document.write输出内容  
    document.body.innerHTML = '测试内容';

 


上面通过SRC加载URL地址的加载方式可能在平时主要的广告部署方式下并不常见,更多的则是一段JS代码。例如百度的广告代码

XML/HTML代码


    BAIDU_CLB_SLOT_ID = "******";  
    

 


这里是在body中加载的,是无法通过SRC来实现的。这时我们可以通过向iframe的BODY中动态写入内容的方式来执行。


代码如下:

JavaScript代码

    


这样的话实际上广告是算在iframe中加载的,不会阻塞主页面的加载速度,而且不存在跨域的问题。


但是在实际部署中,在IE8以下的IE内核浏览器中会存在广告尚未加载完成,页面已经终止的情况。具体原因是IE8以下的浏览器的document.close()的执行并不会向其它浏览器那样会等待document中的内容加载完成后再执行。即:百度广告平台的代码刚刚开始执行,尚未解析出该抛出什么广告的时候,页面已经开始执行document.close()已经将文档关闭,广告代码的加载就被终止了。如果你不写document.close()的话此问题将不存在,但是会影响整个主页面的onload事件。


还有一种方式,就是判断浏览器,在IE8以下用延迟执行document.close()的方式解决此问题,但是同样也会多少影响主页面onload事件。



分享到:
JavaScript中利用Array和Object实现Map的...
本文讲解JavaScript中利用Array和Object实现Map的方法。分享给大家供大家参考。具体如下: 用JavaScript实现的Map感觉很不错,但是发现有个别方法有问题,顺便完善了下,添加了 remove 、indexOf 、values、clear等方法。 /**  * @author blune68  * @version 0.1, 07/27/12  *   */ function Map(){   ...
javascript 同步、异步各种执行方式的顺...
本文讲解javascript 同步、异步各种执行方式的顺序讲解 script 标签在HTML5中除了具备HTML5新标准定义的属性以外,和HTML4.01相比移除了language属性,修改了type属性为可选的(默认text/javascript),并新增了一个属性async。 async :boolean, 属性的作用,定义脚本是否异步执行,取值true或false。  如果 async 设为 tr...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……