解决方案 »

  1.   

    <script defer >alert("ok"); </script > 
    不能放在第一行.
      

  2.   

    楼上的说的没用。
    1楼:这是XMLHTTP加载过来的,不一样。
    2楼:正式用的页面前面有内容的。script没在第一行。继续等待奇迹出现………
      

  3.   

    感觉跟是不是从xmlhttp加载没关系,都是将js innerHTML操作,不过没试过,有空测试一下。
      

  4.   

    script 加个隐藏的span就可以了<html>
    <head>
    </head>
    <body onload="aa()">
    <div id="dv1"></div>
    </body>
    </html>
    <script language="javascript" type="text/javascript" > 
    function aa()
    {
      document.getElementById("dv1").innerHTML="<span style='display:none'>1</span><scri"+"pt defer>alert(1)</sc"+"ript>";
      alert(document.getElementById("dv1").innerHTML);
    }
    </script>参考文章 http://www.coolcode.cn/?p=117
      

  5.   

    我这个是XMLHTTP加载的另一个页面(这个页面可能是文字+脚本)
    不是直接innerHTML="<scr"+"ipt>"...这种。情况一样的。来个附件[1K]:http://jiaxue.10mb.cn/innerHTML.rar
      

  6.   

    附件:http://jiaxue.10mb.cn/innerHTML.rar 
      

  7.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html>
    <head>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>新建网页</title>
    <style type="text/css">
    body{}
    </style>
    </head>
    <body>
    从A-2.html加载内容含脚本<P>
    <div id="oDiv"></div><script language="javascript">
    /*
    * 描述:跨浏览器的设置 innerHTML 方法
    *       允许插入的 HTML 代码中包含 script 和 style
    * 作者:kenxu <kenxu at ajaxwing dot com>
    * 日期:2006-09-01
    * 参数:
    *    el: 合法的 DOM 树中的节点
    *    htmlCode: 合法的 HTML 代码
    * 经测试的浏览器:ie5+, firefox1.5+, opera8.5+
    */
    /* innerhtml.js 
    * Copyright Ma Bingyao <[email protected]
    * Version: 1.9 
    * LastModified: 2006-06-04 
    * This library is free.  You can redistribute it and/or modify it. 
    * http://www.coolcode.cn/?p=117 
    */ 
      
    var global_html_pool = []; 
    var global_script_pool = []; 
    var global_script_src_pool = []; 
    var global_lock_pool = []; 
    var innerhtml_lock = null; 
    var document_buffer = ""; 
      
    function set_innerHTML(obj_id, html, time) { 
        if (innerhtml_lock == null) { 
            innerhtml_lock = obj_id; 
        } 
        else if (typeof(time) == "undefined") { 
            global_lock_pool[obj_id + "_html"] = html; 
            window.setTimeout("set_innerHTML('" + obj_id + "', global_lock_pool['" + obj_id + "_html']);", 10); 
            return; 
        } 
        else if (innerhtml_lock != obj_id) { 
            global_lock_pool[obj_id + "_html"] = html; 
            window.setTimeout("set_innerHTML('" + obj_id + "', global_lock_pool['" + obj_id + "_html'], " + time + ");", 10); 
            return; 
        } 
      
        function get_script_id() { 
            return "script_" + (new Date()).getTime().toString(36) 
              + Math.floor(Math.random() * 100000000).toString(36); 
        } 
      
        document_buffer = ""; 
      
        document.write = function (str) { 
            document_buffer += str; 
        } 
        document.writeln = function (str) { 
            document_buffer += str + "\n"; 
        } 
      
        global_html_pool = []; 
      
        var scripts = []; 
        html = html.split(/<\/script>/i); 
        for (var i = 0; i < html.length; i++) { 
            global_html_pool[i] = html[i].replace(/<script[\s\S]*$/ig, ""); 
            scripts[i] = {text: '', src: '' }; 
            scripts[i].text = html[i].substr(global_html_pool[i].length); 
            scripts[i].src = scripts[i].text.substr(0, scripts[i].text.indexOf('>') + 1); 
            scripts[i].src = scripts[i].src.match(/src\s*=\s*(\"([^\"]*)\"|\'([^\']*)\'|([^\s]*)[\s>])/i); 
            if (scripts[i].src) { 
                if (scripts[i].src[2]) { 
                    scripts[i].src = scripts[i].src[2]; 
                } 
                else if (scripts[i].src[3]) { 
                    scripts[i].src = scripts[i].src[3]; 
                } 
                else if (scripts[i].src[4]) { 
                    scripts[i].src = scripts[i].src[4]; 
                } 
                else { 
                    scripts[i].src = ""; 
                } 
                scripts[i].text = ""; 
            } 
            else { 
                scripts[i].src = ""; 
                scripts[i].text = scripts[i].text.substr(scripts[i].text.indexOf('>') + 1); 
                scripts[i].text = scripts[i].text.replace(/^\s*<\!--\s*/g, ""); 
            } 
        } 
      
        var s; 
        if (typeof(time) == "undefined") { 
            s = 0; 
        } 
        else { 
            s = time; 
        } 
      
        var script, add_script, remove_script; 
      
        for (var i = 0; i < scripts.length; i++) { 
            var add_html = "document_buffer += global_html_pool[" + i + "];\n"; 
            add_html += "document.getElementById('" + obj_id + "').innerHTML = document_buffer;\n"; 
            script = document.createElement("script"); 
            if (scripts[i].src) { 
                script.src = scripts[i].src; 
                if (typeof(global_script_src_pool[script.src]) == "undefined") { 
                    global_script_src_pool[script.src] = true; 
                    s += 2000; 
                } 
                else { 
                    s += 10; 
                } 
            } 
            else { 
                script.text = scripts[i].text; 
                s += 10; 
            } 
            script.defer = true; 
            script.type =  "text/javascript"; 
            script.id = get_script_id(); 
            global_script_pool[script.id] = script; 
            add_script = add_html; 
            add_script += "document.getElementsByTagName('head').item(0)"; 
            add_script += ".appendChild(global_script_pool['" + script.id + "']);\n"; 
            window.setTimeout(add_script, s); 
            remove_script = "document.getElementsByTagName('head').item(0)"; 
            remove_script += ".removeChild(document.getElementById('" + script.id + "'));\n"; 
            remove_script += "delete global_script_pool['" + script.id + "'];\n"; 
            window.setTimeout(remove_script, s + 10000); 
        } 
      
        var end_script = "if (document_buffer.match(/<\\/script>/i)) {\n"; 
        end_script += "set_innerHTML('" + obj_id + "', document_buffer, " + s + ");\n"; 
        end_script += "}\n"; 
        end_script += "else {\n"; 
        end_script += "document.getElementById('" + obj_id + "').innerHTML = document_buffer;\n"; 
        end_script += "innerhtml_lock = null;\n"; 
        end_script += "}"; 
        window.setTimeout(end_script, s); 
    }
    var xmlhttp = false;
    function createxmlhttp(){
    if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
    if (xmlhttp.overrideMimeType) {
    xmlhttp.overrideMimeType('text/html');
    }
    } else if (window.ActiveXObject) {
    try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
    }
                 }
    }

            if (!xmlhttp) {
    alert('浏览器无法创建XMLHTTP,将无法激活空间请升级或更换浏览器!');
    }
    }
    createxmlhttp();
    xmlhttp.open("GET","A-1.html",false)
    xmlhttp.send(null);
    //document.getElementById("oDiv").innerHTML = xmlhttp.responseText;
    set_innerHTML("oDiv",xmlhttp.responseText);</script></body>
    </html>
    不知你试了没?这是改过的A.html
      

  8.   

    xmlhttp.open("GET","A-1.html",false)
    xmlhttp.send(null);
    if(window.navigator.userAgent.indexOf("Firefox")>=1) //针对FF
    {
        document.getElementById("oDiv").innerHTML = xmlhttp.responseText;
        var scripts = document.getElementById("oDiv").getElementsByTagName("script");
        for(var i=0;i<scripts.length;i++) //一段一段执行script
        {
            eval(scripts[i].innerHTML);
        }
    }else if(window.navigator.userAgent.indexOf("MSIE")!=-1)
    {
        var httpText = xmlhttp.responseText;
        httpText = httpText.replace(/<script[^>]*>/gi,"<script defer>")//因为<script defer>可以在IE上直接运行,所以把所有的script标签都替换成defer标记的script
        document.getElementById("oDiv").innerHTML = httpText;
    }
    </script></body>
    </html>
      

  9.   

    8楼的方法有些复杂哦,太长了,有空再看。10CutBug,用遍历+eval,简单易理解。不错。谢谢各位。