<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>
<script language="javascript">var setInnerHTML = (function () {
var element_stack = [];
var input_stack = [];
var html_stack = [];
var timer = null;
var ua = navigator.userAgent.toLowerCase();
var isIE = (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0);
var old_document_write = document.write;
var old_document_writeln = document.writeln;
var loding_script = false;
 
var callback = function () {
    if (loding_script) {
        return;
    }
    if (element_stack.length == 0) {
        clearInterval(timer);
        timer = null;
        document.write = old_document_write;
        document.writeln = old_document_writeln;
        return;
    }
    var index = element_stack.length - 1;
    var input = input_stack[index];
    if (input.length == 0) {
        input_stack.pop();
        var element = element_stack.pop();
        var html = html_stack.pop();
        element.innerHTML = '';
        if (typeof beforeInsert == 'function') {
            html = beforeInsert(html);
        }
        if (html.match(/<script([^>]*>)((.|\r|\n)*?)<\/script>/i) != null) {
setInnerHTML(element, html);
            return;
        }
        if (isIE) {
            html = '<div style="display:none">for IE</div>' + html;
            element.innerHTML = html;
            element.removeChild(element.firstChild);
        } else {
            element.innerHTML = html;
        }
        return;
    }
    var item = input[input.length - 1];
    if (typeof item == 'string') {
        html_stack[index] += item;
        input.pop();
    } else if (typeof item == 'object') {
        if (item.src) {
            loding_script = true;
            var script = document.createElement('script');
            script.src = item.src;
            script.__index = index;
            if (isIE) {
                script.onreadystatechange = script_loaded;
            } else {
                script.onload = script_loaded;
            }
            var head = document.getElementsByTagName('head')[0];
            head.appendChild(script);
        }
        if (item.text) {
            var script = document.createElement('script');
            script.text = item.text;
            var head = document.getElementsByTagName('head')[0];
            head.appendChild(script);
            input.pop();
        }
    } else {
        input.pop();
    }
}
 
var script_loaded = function () {
    if (isIE && this.readyState.toLowerCase() != "loaded" && this.readyState.toLowerCase() != "complete") {
        return;
    }
    var index = this.__index;
    input_stack[index].pop();
    loding_script = false;
}
 
var new_document_write = function() {
    for (var i = 0; i < arguments.length; i++) {
        html_stack[element_stack.length - 1] += arguments[i];
    }
}
 
var new_document_writeln = function () {
    for (var i = 0; i < arguments.length; i++) {
        new_document_write(arguments[i] + "\n");
    }
}
 return function (element, htmlCode) {// alert('element:' + element);
alert('htmlCode' + htmlCode);    element_stack.push(element);
html_stack.push('');
    var input = [];
    while (true) {
        if ((m = htmlCode.match(/<script([^>]*>)((.|\r|\n)*?)<\/script>/i)) == null) {
            break;
        }
        input.unshift(htmlCode.substr(0, m.index));
        htmlCode = htmlCode.substr(m.index + m[0].length);
        if ((m2 = m[1].match(/src\s*=\s*(['"]?)([^'">\s]*)\1/i)) != null) {
            input.unshift({src:m2[2]});
        } else {
            input.unshift({text:m[2]});
        }
    }
    input.unshift(htmlCode);
    input_stack.push(input);
    if (timer == null) {
        document.write = new_document_write;
        document.writeln = new_document_writeln;
        timer = setInterval(callback, 10);
    }
}})();// loadBanner function.
var $ = function(id){
return document.getElementById(id);
};function loadBanner(str1,str2){
$(str1).innerHTML = $(str2).innerHTML;
$(str2).innerHTML = "";
}
</script> <BODY><table border="1" width="auto">
<tr><td>1</td></tr>
<tr><td> <div id="b1"> 1</div></td></tr>
<tr><td>2</td></tr>
<tr><td><div id="b2"> 2</div></td></tr>
<tr><td>3</td></tr>
<tr><td><div id="b3"> 3</div></td></tr>
<tr><td>4</td></tr>
<tr><td><div id="b4"> 4</div></td></tr>
<tr><td>5</td></tr>
<tr><td><div id="b5"> 5</div></td></tr>
</table>
对比两种显示方法,得出不能显示的根源
<script>//document.getElementById("b1").innerHTML = document.write("<script language='JavaScript' type='text/javascript' src='http://ad.cn.doubleclick.net/adj/qa.eetchina.com/ARTICLE/Buffer_Storage;eepos=verticalbanner;ptile=1;sz=120x240;ua=CAT_626963_buffer-storage.HTM;ord=6073708313601899?'><\/script>");
setInnerHTML("b1","<script language='JavaScript' type='text/javascript' src='http://ad.cn.doubleclick.net/adj/qa.eetchina.com/ARTICLE/Buffer_Storage;eepos=verticalbanner;ptile=1;sz=120x240;ua=CAT_626963_buffer-storage.HTM;ord=6073708313601899?'><\/script>");
</script>
 </BODY>
</HTML>
文件如上,在文件末将banner显示出来,当图片banner时正常,flash时不正常,
功力不够,请高手帮助,分不够再加

解决方案 »

  1.   

    当然不一样了
    setInnerHTML你这个是过滤了,FLASH是需要发代码才可以的,但是你一过滤,原本有点那段FLASH播放代码被去掉了,直接是播放不了的
      

  2.   

    document.write是向文档写数据而不是向你的div写数据,看下弹出:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
    <HTML> 
      <HEAD> 
       <TITLE> New Document  </TITLE> 
       <META NAME="Generator" CONTENT="EditPlus"> 
       <META NAME="Author" CONTENT=""> 
       <META NAME="Keywords" CONTENT=""> 
       <META NAME="Description" CONTENT=""> 
      </HEAD> 
    <script language="javascript"> var setInnerHTML = (function () { 
    var element_stack = []; 
    var input_stack = []; 
    var html_stack = []; 
    var timer = null; 
    var ua = navigator.userAgent.toLowerCase(); 
    var isIE = (ua.indexOf('msie') >= 0 && ua.indexOf('opera')  < 0); 
    var old_document_write = document.write; 
    var old_document_writeln = document.writeln; 
    var loding_script = false; 
      
    var callback = function () { 
        if (loding_script) { 
            return; 
        } 
        if (element_stack.length == 0) { 
            clearInterval(timer); 
            timer = null; 
            document.write = old_document_write; 
            document.writeln = old_document_writeln; 
            return; 
        } 
        var index = element_stack.length - 1; 
        var input = input_stack[index]; 
        if (input.length == 0) { 
            input_stack.pop(); 
            var element = element_stack.pop(); 
            var html = html_stack.pop(); 
            element.innerHTML = ''; 
            if (typeof beforeInsert == 'function') { 
                html = beforeInsert(html); 
            } 
            if (html.match(/ <script([^>]*>)((. ¦\r ¦\n)*?) <\/script>/i) != null) { 
    setInnerHTML(element, html); 
                return; 
            } 
            if (isIE) { 
                html = ' <div style="display:none">for IE </div>' + html; 
                element.innerHTML = html; 
                element.removeChild(element.firstChild); 
            } else { 
                element.innerHTML = html; 
            } 
            return; 
        } 
        var item = input[input.length - 1]; 
        if (typeof item == 'string') { 
            html_stack[index] += item; 
            input.pop(); 
        } else if (typeof item == 'object') { 
            if (item.src) { 
                loding_script = true; 
                var script = document.createElement('script'); 
                script.src = item.src; 
                script.__index = index; 
                if (isIE) { 
                    script.onreadystatechange = script_loaded; 
                } else { 
                    script.onload = script_loaded; 
                } 
                var head = document.getElementsByTagName('head')[0]; 
                head.appendChild(script); 
            } 
            if (item.text) { 
                var script = document.createElement('script'); 
                script.text = item.text; 
                var head = document.getElementsByTagName('head')[0]; 
                head.appendChild(script); 
                input.pop(); 
            } 
        } else { 
            input.pop(); 
        } 

      
    var script_loaded = function () { 
        if (isIE && this.readyState.toLowerCase() != "loaded" && this.readyState.toLowerCase() != "complete") { 
            return; 
        } 
        var index = this.__index; 
        input_stack[index].pop(); 
        loding_script = false; 

      
    var new_document_write = function() { 
        for (var i = 0; i  < arguments.length; i++) { 
            html_stack[element_stack.length - 1] += arguments[i]; 
        } 

      
    var new_document_writeln = function () { 
        for (var i = 0; i  < arguments.length; i++) { 
            new_document_write(arguments[i] + "\n"); 
        } 

      return function (element, htmlCode) { // alert('element:' + element); 
    alert('htmlCode' + htmlCode);     element_stack.push(element); 
    html_stack.push(''); 
        var input = []; 
        while (true) { 
            if ((m = htmlCode.match(/ <script([^>]*>)((. ¦\r ¦\n)*?) <\/script>/i)) == null) { 
                break; 
            } 
            input.unshift(htmlCode.substr(0, m.index)); 
            htmlCode = htmlCode.substr(m.index + m[0].length); 
            if ((m2 = m[1].match(/src\s*=\s*(['"]?)([^'">\s]*)\1/i)) != null) { 
                input.unshift({src:m2[2]}); 
            } else { 
                input.unshift({text:m[2]}); 
            } 
        } 
        input.unshift(htmlCode); 
        input_stack.push(input); 
        if (timer == null) { 
            document.write = new_document_write; 
            document.writeln = new_document_writeln; 
            timer = setInterval(callback, 10); 
        } 
    }})(); 
    // loadBanner function. 
    var $ = function(id){ 
    return document.getElementById(id); 
    }; function loadBanner(str1,str2){ 
    $(str1).innerHTML = $(str2).innerHTML; 
    $(str2).innerHTML = ""; 

    </script>   <BODY> <table border="1" width="auto"> 
    <tr> <td>1 </td> </tr> 
    <tr> <td>  <div id="b1"> 1 </div> </td> </tr> 
    <tr> <td>2 </td> </tr> 
    <tr> <td> <div id="b2"> 2 </div> </td> </tr> 
    <tr> <td>3 </td> </tr> 
    <tr> <td> <div id="b3"> 3 </div> </td> </tr> 
    <tr> <td>4 </td> </tr> 
    <tr> <td> <div id="b4"> 4 </div> </td> </tr> 
    <tr> <td>5 </td> </tr> 
    <tr> <td> <div id="b5"> 5 </div> </td> </tr> 
    </table> 
    对比两种显示方法,得出不能显示的根源 
    <script> 
    alert(document.body.innerHTML)
    document.getElementById("b1").innerHTML = document.write(" <script language='JavaScript' type='text/javascript' src='http://ad.cn.doubleclick.net/adj/qa.eetchina.com/ARTICLE/Buffer_Storage;eepos=verticalbanner;ptile=1;sz=120x240;ua=CAT_626963_buffer-storage.HTM;ord=6073708313601899?'> <\/script>"); 
    //setInnerHTML("b1"," <script language='JavaScript' type='text/javascript' src='http://ad.cn.doubleclick.net/adj/qa.eetchina.com/ARTICLE/Buffer_Storage;eepos=verticalbanner;ptile=1;sz=120x240;ua=CAT_626963_buffer-storage.HTM;ord=6073708313601899?'> <\/script>"); 
    alert(document.body.innerHTML)
    </script> 
      </BODY> 
    </HTML> 
      

  3.   

    不能这么写<script>的字符串标签.要分开来写:如: "<scrip" + "t>fdksjlfjdslfjsdklfjkdsjkfds<\/scr" + "ipt>";
      

  4.   

    哦,不好意思, 刚刚没测试, 测了下.element.removeChild(element.firstChild); 这里报错.
      

  5.   

    代码运行有错 
    发的时候 用 工具栏上点 # 添加 html 代码 
    以免 发错
    否则 我们从新去测试 累,说不定把方向都改错了
      

  6.   

     高手,如何也将flash包进来?   
      

  7.   

     高手,如何也将flash包进来?   
      

  8.   

    找 flash真是地址 替换 我经常干这事
      

  9.   

    if (isIE) { 
                html = ' <div style="display:none">for IE </div>' + html; 
                //element.innerHTML = html; 
                //element.removeChild(element.firstChild); 
    //document.getElementById('b1').innerHTML='htmlCode' + html;
    alert('htmlCode' + html);
            } else { 
                element.innerHTML = html; 
            } 
    你这个变成这样你就清楚了,看看你用正则过滤只剩下href链接和图片地址,如果是FLASH的话,你过滤了只剩下FLASH的地址,你觉得只有FLASH地址,FLASH可以播放?平常FLASH是怎么才可以显示的?
    难道只是FLASH地址?
    还有//element.removeChild(element.firstChild); 这句话在IE中有错误
      

  10.   

    可是这此代码在网站是工作正常的,
    http://www.esmchina.com/
    http://www.esmchina.com/script/BannerCommandLib.js