Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
粘贴HTML代码后执行Javascript脚本_Javascript_Jquery_Html_Browser_Tags - Fatal编程技术网

粘贴HTML代码后执行Javascript脚本

粘贴HTML代码后执行Javascript脚本,javascript,jquery,html,browser,tags,Javascript,Jquery,Html,Browser,Tags,我正在做一些实验,我发现当你在任何网页上执行代码时: document.documentElement.innerHTML = document.documentElement.innerHTML; Javascript脚本刚刚被“禁用”。下面是我编写的一个小脚本,它使用jQuery重新执行这些脚本(因此您需要在一些网站上注入jQuery(我使用的是Firebug+FireQuery)): 所以这个脚本在我尝试过的大多数网站上都可以使用,除了一个:(在Firefox中) 我实际上要做的是存储G

我正在做一些实验,我发现当你在任何网页上执行代码时:

document.documentElement.innerHTML = document.documentElement.innerHTML;
Javascript脚本刚刚被“禁用”。下面是我编写的一个小脚本,它使用jQuery重新执行这些脚本(因此您需要在一些网站上注入jQuery(我使用的是Firebug+FireQuery)):

所以这个脚本在我尝试过的大多数网站上都可以使用,除了一个:(在Firefox中)

我实际上要做的是存储Google HTML,并将其粘贴到iframe中(通过Firefox扩展)。所以,除了我无法让Javascript脚本工作(没有自动完成,按钮不工作…)之外,一切都很好。以下是我得到的错误:

gapi.loaded_0不是一个函数

window.google.pmc未定义

我在想,这可能是由于执行令问题或其他原因。但我怎么能解决这个问题呢。有没有其他方法可以重新运行Javascript脚本?或者有更好的方法来做我正在做的事情


谢谢大家!

是的!有一个更好的方法来做你正在做的事情

首先,发生了什么:

使用
innerHTML
时,将从DOM中删除现有元素。不完全是在“地球的燃烧和盐碱化”中,因为其他引用可能会存活下来,但它们已经脱离了DOM

幸运的是,有一种简单的方法可以解决这个问题:

这是一个精彩的讨论,描述了你需要做什么。了解幕后情况值得一读

一旦你有了这些,看看jQuery,它为你做了很多工作:

由于您没有显示任何HTML,我将发明一些:

<div id="contents-will-be-replaced">
  <button>Click me</button>
</div>


// Attach to the DIV
// But listen for buttons
$( "#contents-will-be-replaced" ).on( "click", "button", function() {
  alert("Button pushed");
});

点击我
//附在DIV上
//但请注意按钮
$(“#内容将被替换”)。在(“单击”、“按钮”上,函数(){
警报(“按下按钮”);
});

U可以简单地使用Jquery的
.html()
在dom中动态加载脚本。基本上,jquery将在添加到DOM时检查html,然后在头部自动创建脚本标记。它很光滑。看看它是否适合你


根据设计,任何接受HTML字符串-jQuery()、.append()、.after()等的jQuery构造函数或方法都可能执行代码。这可以通过注入脚本标记或使用执行代码的HTML属性(例如,)来实现。不要使用这些方法插入从URL查询参数、cookie或表单输入等不受信任的来源获取的字符串。这样做可能会引入跨站点脚本(XSS)漏洞。在向文档中添加内容之前,请删除或转义任何用户输入。

您一定误解了我的意思。我的问题不是触发innerHTML的事件。问题是:我存储谷歌主页HTML。当我尝试将HTML粘贴到iframe中时,javascript脚本不会执行。这就是为什么我写了一个脚本,删除并重新附加这些标签,这是与谷歌以外的任何其他网站的工作。我没有显示任何HTML,因为没有任何HTML,除了Google的。问题是,当我使用
$.HTML()
,jQuery会删除我的
标记(但保留它们的子项),所以所有的东西都是混合的,不起作用。它应该去掉
标记,因为JQuery可能假设这些标记已经在DOM中了。当我使用
.html()
解决一个类似的问题时,我注意到脚本标记没有像在普通DOM渲染中那样阻塞;换句话说,它似乎添加了异步脚本。因此,在代码中,在将下一个脚本应用到DOM之前,可能需要从脚本标记中侦听
onLoad
事件。
<div id="contents-will-be-replaced">
  <button>Click me</button>
</div>


// Attach to the DIV
// But listen for buttons
$( "#contents-will-be-replaced" ).on( "click", "button", function() {
  alert("Button pushed");
});