粘贴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");
});