Доступ к элементам DOM через расширение chrome
Я пытаюсь получить доступ к некоторым элементам DOM с веб-страницы:
<html>
<button id="mybutton">click me</button>
</html>
Я хочу получить доступ к innerHTML ("нажмите меня") через расширение chrome:
chrome.browserAction.onClicked.addListener(function(tab) {
var button = document.getElementById("mybutton");
if(button == null){
alert("null!");
}
else{
alert("found!");
}
});
когда я нажимаю расширение, всплывающее окно говорит:"null". Мой манифест.в JSON:
{
"name": "HackExtension",
"description": "Hack all the things",
"version": "2.0",
"permissions": [
"tabs", "http://*/*"
],
"background": {
"scripts": ["contentscript.js"],
"persistent": false
},
"browser_action": {
"scripts": ["contentscript.js"],
"persistent": false
},
"manifest_version": 2
}
1 ответов
решение: Вам нужен файл манифеста, фоновый сценарий и сценарий содержимого. Это не совсем ясно в документации, что вы должны использовать его, а также, как его использовать. Для оповещения полного dom см. здесь. Поскольку мне трудно найти полное решение, которое действительно работает, а не только фрагменты, которые бесполезны для новичков, таких как я, я включил конкретный решение:
манифест.в JSON
{
"manifest_version": 2,
"name": "Test Extension",
"version": "0.0",
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"content_scripts": [{
"matches": ["file:///*"],
"js": ["content.js"]
}],
"browser_action": {
"default_title": "Test Extension"
},
"permissions": ["activeTab"]
}
содержание.js
/* Listen for messages */
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
/* If the received message has the expected format... */
if (msg.text && (msg.text == "report_back")) {
/* Call the specified callback, passing
the web-pages DOM content as argument */
sendResponse(document.getElementById("mybutton").innerHTML);
}
});
фон.js
/* Regex-pattern to check URLs against.
It matches URLs like: http[s]://[...]stackoverflow.com[...] */
var urlRegex = /^file:\/\/\/:?/;
/* A function creator for callbacks */
function doStuffWithDOM(element) {
alert("I received the following DOM content:\n" + element);
}
/* When the browser-action button is clicked... */
chrome.browserAction.onClicked.addListener(function(tab) {
/*...check the URL of the active tab against our pattern and... */
if (urlRegex.test(tab.url)) {
/* ...if it matches, send a message specifying a callback too */
chrome.tabs.sendMessage(tab.id, { text: "report_back" },
doStuffWithDOM);
}
});
.HTML-код
<html>
<button id="mybutton">click me</button>
</html>
просто сохраните индекс.html где-то и загрузите в папку в качестве расширения, содержащего три других файла. Откройте указатель.html и нажмите кнопку расширения. Он должен показывать "click me".