2016-06-22 4 views
0

Я пытаюсь написать свое первое дополнение Firefox с помощью WebExtensions (это довольно сложно для первого расширения). Мне нужно обработать результаты всех поисковых запросов Google в течение сеанса (session = query, используя ту же страницу Google). У меня есть следующий код:Обновить Firefox-аддон, когда страница динамически изменена

manifest.json:

{ 
    "manifest_version": 2, 
    "name": "MyAddon", 
    "version": "0.0.1", 

    "description": "My Add-on", 
    "icons": { 
     "48": "icons/icon-48.png" 
    }, 

    "applications": { 
     "gecko": { 
      "id": "[email protected]", 
      "strict_min_version": "42.0" 
     } 
    }, 

    "content_scripts": [ 
    { 
     "matches": ["*://www.google.com/*"], 
     "js": ["index.js"] 
    } 
    ] 
} 

index.js:

var pageUrl = window.location.href; 

var req = new XMLHttpRequest(); 
req.open("GET", pageUrl, true); 
req.onreadystatechange = function() { 
    if(req.readyState == 4 && req.status == 200) { 
     handleResponse(req.responseText); 
    }; 
}; 
req.send(); 

function handleResponse(pageContent) { 
    // Do some processing ... 
} 

Он делает именно то, что мне нужно для первого поиска (с помощью адресной строки). Однако надстройка загружается при первом входе на страницу Google, делает то, что ей нужно, а затем останавливается. Он только перезагружается, когда я обновляю страницу или делаю другой запрос из адресной строки.

Мне нужно найти способ перезагрузить надстройку, когда я делаю другой поиск с помощью поля поиска и выполняю обработку снова, но не теряя работу из предыдущих поисков. Полагаю, мне придется использовать файлы cookie, но я еще не там.

Я пытался использовать req.addEventListener("load", someFunction) вместо/кроме req.onreadystatechange(), но это не решило проблему. Есть идеи?

Спасибо!

ответ

0

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

Проблема, с которой вы загружаете страницу, состоит в том, что она не загружается вообще. Сама страница загружается в браузер, и она останется такой (ready-state, о которой вы упомянули, не изменится), пока вы не уйдете. Что действительно меняется, это просто контент на странице. Вы должны создать прослушиватель onClick для кнопки поиска Google (или прослушиватель для Enter pressed в поле поиска или даже change событие в поле поиска). Кроме того, вы можете захотеть использовать jQuery, чтобы помочь вам.

Смежные вопросы