[英]Altering CreateElement method via Javascript doesn't work for iframes
我想全局重新定義一個createElement方法,但是不幸的是,它僅在主文檔中有效,並且在iframe中被忽略。 讓我們看下面的示例代碼:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
old_createElement = document.createElement;
document.createElement = function(el_type) {
new_el = old_createElement.call(this, el_type);
new_el.style.color="red";
return new_el;
};
</script>
</head>
<body bgcolor="white">
<iframe id="iframe1"></iframe>
<script type="text/javascript">
window.setTimeout(function(){
iframe_el = document.getElementById("iframe1").contentDocument.createElement("div");
iframe_el.innerHTML = 'inside iframe';
document.getElementById("iframe1").contentDocument.body.appendChild(iframe_el);
},50);
no_iframe_el=document.createElement('div');
no_iframe_el.innerHTML = 'outside of iframe';
document.body.appendChild(no_iframe_el);
</script>
</body>
</html>
當我在瀏覽器中打開時,在主文檔中創建的元素如預期的那樣為紅色,但iframe中的元素為黑色。
問題是我只能控制文檔的HEAD部分中包含的腳本。 換句話說,我不知道稍后在HTML源代碼中將有多少個iframe,或者它們將如何命名,或者它們是否通過用戶的Javascript添加。
我的問題是:如何才能全局更改方法,以便在iframe中創建的所有元素也都使用這種新樣式?
非常感謝!
每個框架都有自己的單獨Javascript上下文。 如果要更改該框架的上下文,則必須專門針對該框架進行操作。
在您的特定示例中,每個框架都有自己的document
對象,因此每個文檔都有自己的.createElement
屬性.createElement
。
您不能以會影響所有框架的方式來一般地更改事物。 而且,實際上,如果它是跨源框架,則根本無法更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.