在Innerhtml中运行js脚本

<div>aaa<script type="text//javascript">alert('test');</script></div>
这样的一段HTML节点中包含了一些JS代码.如果想把这段放到一个DOM容器中.并且把里面的JS运行起来
这样问题就出现了.

首先:
$('fun').innerHTML = '<div>aaa<script type="text//javascript">alert(/'test/');</script><//div>';

这样写的话就有问题了.里面的JS是无法运行起来的

在做 ajax 编程时,我们常常需要将 xmlhttp 获取到的页面内容通过 innerHTML 来赋给某个容器(比如 div、span 或者 td 等),但是这里存在一个问题,就是我们将要赋给 innerHTML 的页面内容如果包含有脚本程序,这些脚本程序不管是外部脚本,还是内部脚本,可能(1)都不会被执行。这个问题在某些时候微不足道,甚至可以忽略,但有些时候,这个问题就非常严重,它很可能让我们的程序得不到预期的结果。因此我们需要解决这个问题。

如果你读过 MSDN,你会发现并非所有插入到 innerHTML 中的脚本都不能执行,如果这段脚本的 script 标签中包含了 defer 属性,IE 会正确的执行这些脚本程序。但不幸的是,Moziila/Firefox 和 Opera 可不吃这一套,不管 script 标签有没有设置 defer 属性,这些浏览器都不会向 IE 那样去执行插入到 innerHTML 中的脚本。

但不管脚本是否被执行了,有一点我们可以肯定,那就是这些脚本确实被插入到了 innerHTML 中,如果不相信,你可以 alert 一下看看。但如果你真的 alert 了,你也可能会发现有一种例外情况存在,那就是如果脚本在 innerHTML 内容开头的话,那么 IE 浏览器将会忽略掉这段脚本,而 Moziila/Firefox 和 Opera 却不会。

下面给出一个简单的解决方法

 

var $ = function(o){
    return document.getElementById(o);
};
var fillHTML = function(el, HTMLString){
    if (!el)
        return;
    if (!+"/v1") {
        el.innerHTML = "<img style='display:none'/>" + HTMLString.replace(/<script([^>]*)>/ig, '<script$1 defer>');
        el.removeChild(el.firstChild)
    }
    else {
        var nSibling = el.nextSibling;
        var pNode = el.parentNode;
        pNode.removeChild(el);
        el.innerHTML = HTMLString;
        pNode.insertBefore(el, nSibling)
    }
}
function T(){
    fillHTML($('fun'), '<div>aaa<script type="text//javascript">alert(/'test/');<//script><//div>');
}

 

ps:这个方法只能运行本地脚本,如果运行跨域脚本就不适用了

例如    fillHTML($('channelname'), '<script type="text//javascript" src=2.js><//script>');可以运行

如果换为    fillHTML($('channelname'), '<script type="text//javascript" src=http://www.domain.com/2.js><//script>');

就无法显示

要在网页实现通过按钮运行Python脚本的功能,需要用到以下几个步骤: 1. 编写Python脚本,并将其保存在服务器上。 2. 使用JavaScript编写一个函数,当用户点击按钮时,该函数将向服务器发送请求,并将请求的结果显示在页面上。 3. 在HTML添加一个按钮元素,并绑定点击事件,使其调用上述JavaScript函数。 下面是一个简单的示例,展示了如何通过按钮运行Python脚本: 1. Python脚本 假设我们有一个名为“hello.py”的Python脚本,其内容如下: ```python print("Hello, World!") ``` 我们将其保存在服务器上的“/usr/local/bin/”目录下。 2. JavaScript函数 我们需要编写一个JavaScript函数,该函数将使用XMLHttpRequest对象向服务器发送POST请求,并将服务器返回的响应显示在页面上。下面是一个示例函数: ```javascript function runPythonScript() { var xhr = new XMLHttpRequest(); xhr.open("POST", "/run_script", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { document.getElementById("output").innerHTML = xhr.responseText; } }; xhr.send("script=hello.py"); } ``` 该函数的“/run_script”是服务器上的URL,用于接收POST请求并运行Python脚本。我们还将“Content-type”请求头设置为“application/x-www-form-urlencoded”,以便在请求体传递数据。 该函数将在发送POST请求时传递一个名为“script”的参数,其值为要运行的Python脚本的文件名(在此示例为“hello.py”)。 当服务器返回响应时,该函数将响应文本设置为具有“output”ID的HTML元素的内容。在此示例,我们将响应文本显示在一个具有“output”ID的段落元素。 3. HTML按钮 我们需要在HTML添加一个按钮元素,并为其添加一个点击事件,以便在用户单击按钮时调用上述JavaScript函数。下面是一个示例按钮: ```html <button onclick="runPythonScript()">Run Python Script</button> ``` 当用户单击按钮时,将调用名为“runPythonScript”的JavaScript函数。 完整的HTML代码如下: ```html <!DOCTYPE html> <html> <head> <title>Run Python Script</title> <script type="text/javascript"> function runPythonScript() { var xhr = new XMLHttpRequest(); xhr.open("POST", "/run_script", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { document.getElementById("output").innerHTML = xhr.responseText; } }; xhr.send("script=hello.py"); } </script> </head> <body> <button onclick="runPythonScript()">Run Python Script</button> <p id="output"></p> </body> </html> ``` 当用户单击“Run Python Script”按钮时,将向服务器发送POST请求,并将服务器返回的响应显示在具有“output”ID的段落元素。服务器将读取名为“script”的POST参数,并运行其值指定的Python脚本。在此示例,我们将运行“hello.py”脚本,并在页面上显示其输出“Hello, World!”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值