我试图覆盖应用程序中所有iframe的src
属性,因此无论HTML标签为其定义什么值,它们的src
属性总是设置为“ redirect.html”。
到目前为止,我已经提出了以下建议,但是它似乎不适用于DOM元素:
<!doctype html>
<html>
<head>
<script>
var propertyDescriptorSrc = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, "src");
Object.defineProperty(HTMLIFrameElement.prototype, "src", {
get: function get_src() {
var val = propertyDescriptorSrc.get.call(this);
return "redirect.html";
},
set: function (val) {
alert('setting: ' + val);
propertyDescriptorSrc.set.call(this, val);
}
});
</script>
</head>
<body>
<iframe src="page.html"></iframe>
</body>
</html>
我希望正文中的iframe元素能够加载redirect.html而不是page.html,因为我覆盖了它的“ getter”,但是它仍然加载了page.html。
有没有一种方法可以强制这种行为,默认情况下所有iframe都转到redirect.html而不是其src
属性中定义的内容?
(这只是一个实验项目)
答案 0 :(得分:-1)
根据关键渲染路径,在开始使用javascript之前,DOM树已经被解析并包含所有iframe及其src。 唯一的方法是使用JavaScript重新定义单个iframe节点的src属性。例如,如下。
所有iframe均设置为redirect.html:
<!doctype html>
<html>
<head>
</head>
<body>
<iframe src="page.html"></iframe>
<iframe src="page2.html"></iframe>
<script>
( function(){
var lng = document.getElementsByTagName('iframe').length;
for (var i=0; i<lng;i++){
document.getElementsByTagName('iframe')[i].src="redirect.html";
}
})();
</script>
</body>
</html>
根据建议,@ Aaron Digulla提供了更易读的函数形式。 如今,DOM树的搜索算法似乎是如此高效,以至于参数是记录的可读性,而不是效率。
(function(){
var frames = document.getElementsByTagName('iframe');
for (var i=0; i<frames.length;i++){
frames[i].src="redirect.html";
}
})();