Как нажать кнопку на веб-странице из расширения Chrome, добавив слушателя в `window`? - PullRequest
0 голосов
/ 04 декабря 2018

Я пишу простое расширение для Chrome, которое будет нажимать кнопку на внутреннем веб-сайте моей компании.В частности, веб-сайт содержит кнопку «Показать больше», которая при нажатии будет отображать больше данных.

Моя проблема заключается в том, что при выполнении Javascript, необходимого для нажатия кнопки в консоли Chrome, все работает.Однако, когда я выполняю его из скрипта content.js расширения, кнопка не нажимается.

Это мой manifest.json:

{
 "manifest_version": 2,
 "name": "asd",
 "description": "qwe",
 "version": "0.1",
 "author": "abc",
 "browser_action": {
   "default_icon": "asd.png",
   "default_title": "Have a good day",
   "default_title": "asd"
},
"permissions": ["activeTab", "https://ajax.googleapis.com/"],
"content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["content.js"],
      "run_at": "document_end",
      "all_frames": true
    }
  ]
}

content.js выглядит так:

window.addEventListener('load', function(event) {
    console.log("page load!");
    console.log(window.location.href);
    console.log()
    var pageURL = window.location.href;
    if (pageURL.indexOf('example.com')) {
        console.log('example.com');
        var metaTags = document.querySelectorAll('meta');
        for (var i = 0; i < metaTags.length; i++) {
            console.log(metaTags[i].getAttribute('content'));

            if (metaTags[i].getAttribute('name') === 'application-name' && metaTags[i].getAttribute('content') === 'XYZ') {
                console.log('got match');
                var buttonClass = document.getElementsByClassName('source-viewer-more-code');
                console.log('buttonClass = ' +  JSON.stringify(buttonClass));
                var button = buttonClass[0];
                console.log("button = " + button);
            }
        }
    }
});

Я вижу все console.log отпечатки, однако JSON.stringify(buttonClass) печатает пустой объект и console.log("buttonw = " + button); печатает неопределенный.

В настоящее время я запускаю расширение локально.Это проблема с разрешениями Chrome или что-то еще?

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы можете читать мета-теги, я думаю, это не проблема с разрешениями. Убедитесь, что Button находится в DOM, когда вы пытаетесь получить его с помощью "getElementsByClassName" (Одна из возможных причин, почему кнопка не в DOM, это некоторые jsна странице может быть заполнение кнопки DOM после запроса AJAX).(Когда вы выполняете в консоли, вы можете выполнять после заполнения элемента в DOM), если вы ожидаете кнопку, а ее нет в dom, используйте что-то вроде setTimeout и ждите, пока кнопка будет заполнена другими js на странице.

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