`

在InnerHTML中执行js代码(一位教授解决了这个问题)

阅读更多
<script>
/* innerhtml.js  
* Copyright Ma Bingyao <andot@ujn.edu.cn>  
* 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);   
}  
</script>
/****************************调用****************************/
<script>
set_innerHTML(OperatorId,"<script>jsCode</script>");
</script>
分享到:
评论

相关推荐

    关于在innerHTML中JS不执行的问题

    3. **利用事件监听**:可以将JavaScript代码包装在一个特定的事件处理函数中,例如点击事件,然后通过`innerHTML`添加这个事件触发器。 ```javascript let html = ` &lt;button id="myButton"&gt;Click me document....

    解决ajax返回innerHTML中javascript不能运行问题

    解决 Ajax 返回 innerHTML 中 ...解决 Ajax 返回 innerHTML 中 JavaScript 不能运行问题的关键是将 JavaScript 代码从 Ajax 返回的数据中提取出来,并将其添加到 `&lt;head&gt;` 中,让浏览器能够正确地解析和执行。

    动态创建iframe,并动态添加js执行代码

    总结来说,动态创建iframe并动态添加js执行代码是Web开发中的重要技术,它能够帮助我们实现异步加载、跨域通信等功能,但同时也需要注意相关的安全问题。通过熟练掌握这些技术,开发者能够构建更复杂、更灵活的Web...

    innerHtml(转)

    标题中的"innerHtml(转)"可能是指HTML DOM(Document Object Model)中的一个属性`innerHTML`,这是一个非常关键的概念,特别是在JavaScript中用于处理HTML元素的内容。`innerHTML`允许我们获取或设置HTML元素内部...

    js中innerHTML与innerText的用法与区别

    ### JavaScript中的innerHTML与innerText的用法与区别 在前端开发中,经常需要用到JavaScript来操作DOM元素,其中`innerHTML`和`innerText`是非常重要的属性,它们分别用于获取或设置元素内部的HTML内容和纯文本...

    关于JS和html代码的执行先后问题

    在给定的文件`temp.js`中,我们可以预想它可能包含了用于操作HTML元素的JavaScript代码。为了确保这些代码能够正确执行,我们需要考虑脚本是否正确地插入到HTML中,以及是否使用了`async`或`defer`属性。 另一方面...

    react-Innerself使用innerHTML将ReactRedux转换成50行代码

    标题中的“react-Innerself使用innerHTML将ReactRedux转换成50行代码”表明这是一个关于简化React和Redux集成的项目,它使用了一种叫做Innerself的技术。Innerself是一种轻量级的解决方案,通过innerHTML属性来实现...

    【JavaScript源代码】JS实现一个秒表计时器.docx

    在JavaScript中,实现一个秒表计时器涉及到定时器(setTimeout和setInterval)以及DOM操作。下面我们将详细探讨这些知识点: 1. **定时器:** - `setInterval` 函数用于每隔一定时间执行一次指定的函数。在这个...

    h5动态注入js代码

    而“h5动态注入js代码”是指在H5页面运行时,通过JavaScript程序动态地向页面中添加或修改JavaScript代码,以实现更灵活的功能扩展和页面交互。这种方式常见于响应式设计、数据可视化、用户行为追踪等多种场景。 一...

    一个小的完整的页面计算器,js代码编写的

    这个"一个小的完整的页面计算器"项目是专门为初学者设计的,旨在帮助他们理解如何使用JavaScript来实现基本的数学运算,如加、减、乘、除。 首先,我们需要了解JavaScript的基础知识。JavaScript是一种解释型、弱...

    输入数量和价格自动计算输出金额的js代码

    这里还有一个操作提示"Ctrl+A 全选",这通常是在网页中使用快捷键选择所有文本的说明,但在这里可能是指为了测试这段JS代码,需要在网页中选择该段代码并执行(可能需要全选后复制粘贴到浏览器的控制台执行)。...

    IE中关于使用innerHTML加入HTML代码的问题

    当你尝试在IE中执行上述代码时,浏览器会报错,但错误信息可能不会明确指出问题出在innerHTML。为了解决这个问题,IE提供了innerText属性作为替代。innerText允许设置或获取元素的纯文本内容,而不是HTML。因此,...

    100个常用js代码

    "100个常用js代码"这个主题涵盖了一系列实用的JavaScript代码片段,旨在帮助开发者提升工作效率,解决日常编程中遇到的问题。下面将详细解析这些知识点: 1. **DOM操作**:JavaScript可以操作文档对象模型(DOM),...

    让插入到 innerHTML 中的 script 跑起来的代码第1/2页

    要解决这个问题,我们需要手动提取并执行`innerHTML`中的脚本。以下是一种可能的策略: 1. 检测浏览器类型,避免误判IE。可以通过`navigator.userAgent`来识别浏览器。 2. 避免在IE中重复执行带有`defer`属性的脚本...

    【JavaScript源代码】JS代码编译器Monaco使用方法.docx

    首先,Monaco Editor支持多种编程语言,包括JavaScript,它还提供了一个缩略地图功能,方便开发者快速定位代码。尽管其体积相对较大,但提供的功能强大且全面。 安装Monaco Editor可以通过npm或yarn进行,命令如下...

    常用的js代码分享 常用的js代码分享

    本文将围绕标题和描述中提到的“常用的js代码”展开,分享一些实用的JavaScript代码片段和应用。 一、日期选择器 日期选择器在网页表单中非常常见,用于方便用户输入日期。在JavaScript中,我们可以使用内置的`Date...

    IE6/7/8中使用innerHTML清空元素,其子元素也被清空

    本文将深入探讨一个特定的问题,即在Internet Explorer 6、7和8(以下简称IE6/7/8)浏览器中使用`innerHTML`属性清空元素时,其子元素也会被一并清空的特性。这个现象在其他现代浏览器中并不常见,因此了解这一问题...

    innerHTML动态添加html代码和脚本兼容多个浏览器

    症状:给某个元素的 innerHTML 设置值时,如果提供的 HTML 代码中包含js脚本,很多时候这些脚本无效,或者在某种浏览器上有效,但在其它浏览器上无效。 原因:不同浏览器对插入 innerHTML 中的脚本有不同的处理方法...

    调用innerHTML之后onclick失效问题的解决方法

    在上述的描述中,开发者遇到了一个具体的问题:在调用`innerHTML`后,`onclick`事件不再生效。这个问题通常发生在动态生成或修改HTML内容时,例如在上述例子中,当用户点击按钮改变按钮状态(上线/下线)时,`...

    JavaScript源代码的简单实时代码编辑器.zip

    JavaScript源代码的简单实时代码编辑器是一个用于编程教学、演示或快速原型开发的工具,它允许用户在浏览器中即时编辑并查看代码效果。这个压缩包包含了一个基于JavaScript实现的轻量级代码编辑器项目,其核心特点...

Global site tag (gtag.js) - Google Analytics