Когда My Webextension работает с элементом Iframe, оно выполняется несколько раз - PullRequest
0 голосов
/ 07 мая 2019

У меня есть расширение, которое добавляет форматирование для ввода областей на веб-странице (например, bbCode, HTML, разметка и т. Д.)

Я добавляю символы, что означает, что пользователи могут захотеть не использовать это вполя редактирования расширенного текста.

Проблема заключается в том, что в этих случаях эти элементы часто находятся в iframes и выполняются для страницы, а также iframes, где находится курсор.

Поскольку у меня есть пользовательопция ввода (с использованием функции prompt), это означает, что пользователю несколько раз предлагается элемент iframe, потому что скрипт запускается вверх и вниз по цепочке iframe.

Я сократил содержимое скрипта доминимальные части ниже, чтобы показать операцию.

Я пытался использовать getElementById, чтобы получить конкретный идентификатор элемента в самом нижнем iframe, и просто выполнить там, но я получаю <unavailable> в этомдело.(Это должно выполняться на блоггере, WordPress, phpBB и т. Д., Так что имя элемента не известно до запуска программы, я не могу подчеркнуть это достаточно сильно)

Чтобы изменить текст, я используюdocument.execCommand('copy') и document.execCommand('paste') для доступа и замены выбора / местоположения курсора.

(function(global) {

    var clickedElement = null;

    document.removeEventListener("mousedown", function(event) {
        //right click
        if (event.button == 2) {
            clickedElement = event.target;
        }
    }, true);

    browser.runtime.onMessage.removeListener(function(commandString, sendResponse) {
        CommandParse(commandString);
    }, true);

    document.addEventListener("mousedown", function(event) {
        //right click
        if (event.button == 2) {
            clickedElement = event.target;
        }
    }, true);

    browser.runtime.onMessage.addListener(function(commandString, sendResponse) {
        CommandParse(commandString);
    });


async function CommandParse(argString) {
    console.log("am I looping");

    }

}) (this);

Есть ли способ убедиться, что скрипт Просто вставлен там, где курсор / выделениеявляется?(это может быть либо)

Как к вашему сведению, мой первоначальный (несколько ограниченный) выпуск - здесь , и дает учебник по его работе.

...