Как предотвратить загрузку iframe при вводе в DOM? - PullRequest
1 голос
/ 03 августа 2011

Как предотвратить загрузку iframe при внедрении в DOM?

Например, этот код создает iframe с src, который начинает загрузку.Как можно предотвратить загрузку iframe или остановить загрузку?

Также допустимо предотвращение внедрения iframe.

Хорошая идея изменить поведение "appendChild ()"?

Я использую Opera 11.50 Build 1074.

Ответы [ 3 ]

1 голос
/ 03 августа 2011

добавить пустой iframe

document.body.appendChild(document.createElement('iframe').setAttribute('id', 'myiFrame'));

когда вы хотите загрузить контент:

document.getElementById('myiFrame').setAttribute('src', 'http://blah.com/blah.htm');
1 голос
/ 05 августа 2011

https://gist.github.com/1126767/

// ==UserScript==
// @name Enhance Yahoo! Mail
// @author XP1 (https://github.com/XP1/)
// @namespace https://gist.github.com/1126767/
// @version 1.0
// @description In Yahoo! Mail, opens the download iframe in a new window so that the attachment can be opened if the file type is associated with the Opera browser.
// @include http*://mail.yahoo.*/*
// @include http*://*.mail.yahoo.*/*
// @include http*://mail.yimg.*/*
// @include http*://*.mail.yimg.*/*
// @include http*://yahooapis.*/*
// @include http*://*.yahooapis.*/*
// ==/UserScript==

/*jslint browser: true, vars: true, white: true, maxerr: 50, indent: 4 */
(function (topWindow)
{
    "use strict";

    if (window.self === topWindow)
    {
        var disableDownloadIframe = function ()
        {
            topWindow.addEventListener("DOMNodeInserted", function (event)
            {
                var sourceElement = event.srcElement;
                if (sourceElement.tagName.toLowerCase() === "iframe" && sourceElement.hasAttribute("id") && sourceElement.getAttribute("id").indexOf("#dlFrame") !== -1)
                {
                    var downloadLink = sourceElement.getAttribute("src");
                    sourceElement.parentNode.removeChild(sourceElement);

                    window.open(downloadLink);
                }
            }, false);
        };

        disableDownloadIframe.call(this);
    }
}(window.top));
1 голос
/ 03 августа 2011

Вы не можете перезаписывать такие функции, как appendChild, во всех (если есть) браузерах. Единственный способ предотвратить внедрение iframes - не включать библиотеки JavaScript, которые выполняют произвольное внедрение DOM.

Если вы хотите запретить вставку iframe, это ваш собственный код, просто добавьте некоторые HTML-функции для очистки.

...