Chrome расширение нажмите кнопку, которая создается js - PullRequest
0 голосов
/ 25 апреля 2020

Когда я использую contentscript, нажмите кнопку, которая делает на Javascript на странице сайта.

element.click()

Я сталкиваюсь с той же проблемой: щелчок не является функцией, просто так:

Невозможно нажать кнопку, используя расширение Chrome, но я не могу в инструментах разработчика

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

Спасибо автору, я получил решение:

var x =document.getElementById("someelement");
x.addEventListener('click',function myClick() {
  //here keep empty is ok. no need write anything
});
await sleep(10000);
x.click(); //this lead to the element 's original activity, just like download something....

Теперь все в порядке, мой вопрос: почему? почему это может решить проблему?

Кстати, вопрос, который я цитирую, не является дубликатом, потому что он рассматривается как дубликат, поэтому я не могу задать / ответить на этот вопрос напрямую.

1 Ответ

1 голос
/ 27 апреля 2020

Поскольку скрипты содержимого работают в изолированном контексте, ваш скрипт .click не знает о списке обработчиков, запускаемых element.click(), поэтому он ничего не будет запускать. Добавление нового обработчика из вашего скрипта контента будет ссылаться на оригинальный скрипт страницы, и именно поэтому он вызывает ваше событие.

В любом случае, это способ преодолеть «изоляцию», другой подход, который IMHO более понятно, это запуск чистого DOM-события

Примерно так:

const clickEvent = new Event('click');
const hasFired = element.dispatchEvent(clickEvent);
if(hasFired){
 // everything ok
} else {
 // someone blocked your handler
}

Вы можете взглянуть на Ссылку на событие , так как иногда вам может понадобиться укажите параметры события, попробуйте это

const clickEvent = new Event('click', {cancelable: false, bubbles: true});

Я помню, у меня была та же проблема, что и у вас, и я решил ее с этим

...