簡體   English   中英

通過JavaScript更改CreateElement方法不適用於iframe

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM