Для начала я бы хотел отметить, что я полный нуб, поэтому, пожалуйста, прости меня, если это глупый вопрос.Я работал над этим пару дней и не нашел в Интернете ничего, что помогло бы решить эту конкретную проблему.
Вот что я пытаюсь сделать:
Скажите, что пользователь просматривает сайт, на котором отображаются номера деталей и информация.Каждый раз, когда пользователь нажимает что-то с сайта, сайт загружает новую информацию и URL-адрес изменяется.Затем расширение извлекает UID (уникальный идентификатор) из URL-адреса и ищет в базе данных этот UID.Если UID найден в базе данных, сообщение возвращается к расширению.Отсюда, я хотел бы написать div на странице со словами «Эта часть уже найдена в базе данных».
Проблема здесь в том, что страница меняется, но это не новая страница ... это просто новая информация. Я могу получить расширение для записи на страницу при начальной загрузке , но когда страница меняется, ничего не пишется.
Вот соответствующий код, который я использую:
Манифест
{
"manifest_version": 2,
"name": "My Extension",
"version": "1.0",
"description": "An extension to write to a page",
"icons": {
"128": "icon128.png",
"48": "icon48.png",
"16": "icon16.png"
},
"browser_action": {
"default_icon": "icon16.png",
"default_popup": "popup.html"
},
"background": {
"scripts":["./js/jquery.min.js","./js/extension-check.js"]
},
"content_scripts": [{
"js": ["./js/jquery.min.js","./js/extension-content.js"],
"matches": ["https://www.example.com/*"]
}],
"permissions": [
"activeTab",
"tabs",
"http://*/*",
"https://*/*"
]
}
Popup.html ничего не делает, но дает некоторые кнопки, которыеПользователь может нажать и перейти на некоторые сайты.У него нет соответствующего кода.
extension-check.js
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
if (tabs === undefined || tabs[0] === undefined) return;
var url = tabs[0].url;
if (url.indexOf("example.com/specific-directory") > 0) {
var part_url = // get part of the url
var search_url = 'myexample.com/searching?' + part_url;
$.ajax({
url: search_url,
type: 'post',
dataType: 'JSON',
success: async function(data, textStatus, jqXHR)
{
if (Object.keys(data).length != 0 && data.constructor != Object) {
// Because this script is running in the
// background, I need to send the command to
// something that has permissions to write to the page
chrome.tabs.executeScript(tabId, {
file: './js/extension-content.js'
}, function() {
chrome.tabs.sendMessage(tabId, {parameter: data});
});
}
},
error: function(jqXHR, textStatus, errorThrown)
{
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
}
});
}
}
});
});
extension-content.js
(function() {
chrome.runtime.onMessage.addListener(function(message) {
var receivedParameter = message.parameter;
alert ("In this - " + receivedParameter);
$(".core").prepend("<div>This is a test - " + receivedParameter + "</div>");
});
})();
ПРИМЕЧАНИЕ: Если я изменю эту страницу на:
$(document).ready(function() {
$(".core").prepend("<div>This is a test</div>");
});
Div записывается на страницу.Но это записывается на страницу один раз и никогда не меняется и не исчезает.Это будет отображать неверную информацию.
Ajax работает отлично ... Предупреждение (только для теста) отображается и отображается с переданным параметром.Однако НИЧЕГО не написано на странице.
Может кто-нибудь помочь мне?Кроме того, если у меня что-то не так в манифесте (например, разрешения), я буду в восторге от некоторых отзывов.Опять же, noob в этом, поэтому я, возможно, добавил, что мне не нужно, или у меня нет вещей, которые мне действительно нужны.
Заранее спасибо.