Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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
Javascript 替换为JS后不会执行替换的HTML_Javascript_Html - Fatal编程技术网

Javascript 替换为JS后不会执行替换的HTML

Javascript 替换为JS后不会执行替换的HTML,javascript,html,Javascript,Html,我想在我的网页上实现YouTube视频的延迟加载。为此,我有一个带有YouTube在HTML注释中的iframe代码的a标签。此外,还有一个onclick事件,它将替换注释标记以激活YouTube代码 以下是HMTL的一个示例: <a href="http://www.youtube.com/watch?v=KC2zbOwbeEs&#038;hd=1" class="video-in-link" style="background:url('http://i.ytimg.com/v

我想在我的网页上实现YouTube视频的延迟加载。为此,我有一个带有YouTube在HTML注释中的iframe代码的a标签。此外,还有一个onclick事件,它将替换注释标记以激活YouTube代码

以下是HMTL的一个示例:

<a href="http://www.youtube.com/watch?v=KC2zbOwbeEs&#038;hd=1" class="video-in-link" style="background:url('http://i.ytimg.com/vi/KC2zbOwbeEs/hqdefault.jpg') no-repeat center center; width:500px; height:281px;" onclick="videoInLink(this);">
<!-- xxltxxiframe width="500" height="281" src="http://www.youtube.com/embed/KC2zbOwbeEs?fs=1&#038;feature=oembed&#038;autoplay=1" frameborder="0" allowfullscreenxxgtxxxxltxx/iframexxgtxx -->
</a>
以下是合适的JS:

function videoInLink(anchor){
    anchor.innerHTML = anchor.innerHTML.replace(/xxltxx/gi,'<');
    anchor.innerHTML = anchor.innerHTML.replace(/xxgtxx/gi,'>');
    anchor.innerHTML = anchor.innerHTML.replace(/<!--/,'');
    anchor.innerHTML = anchor.innerHTML.replace(/-->/,'');
    anchor.style.background="none";
    anchor.removeAttribute('href');
    anchor.onclick= null;                                               
    return false;
}
Firefox和Chrome中的一切都很好:内容被替换,视频开始播放。在IE8中,替换似乎也会发生,但视频无法加载

尝试了几种组合,但没有成功

好吧,Dunhamzzz的想法是对的,他让代码变得更简单。我为每个视频提供商更改了自己的功能,实现工作正常。 因此,IE8在执行JavaScript后激活代码方面没有问题,IE8在我的代码方面有问题


也许我以后会改进代码,但我的问题本身已经得到了回答。谢谢。

您可以使用javascript创建iframe节点, 并将其附加到父级,而不是执行此innerHTML攻击。 这里有一个简单的例子:

这是一种非常疯狂的方式,为什么不在函数中编写iframe元素,而不是编写奇怪的搜索和替换语法。问题是,视频提供商不仅仅是YouTube,所有的视频播放器都有不同的实现。如果这样的话,你可以为每个播放器提供不同的功能,至少在运营商改变其嵌入代码时,你可以不用更新所有的视频链接。另外,关于IE8中的问题,可能是因为您将iframe放在锚标记中,请尝试将其更改为div。