Заменить символы на веб-странице расширением Chrome - PullRequest
2 голосов
/ 17 марта 2012

Я пытаюсь понять, как написать простое расширение для Chrome, которое позволяет транслировать веб-страницы с одного алфавита на другой. К сожалению, документация Google по расширениям Chrome довольно запутана для новичка. Я видел много подобных вопросов здесь, например. Замените текст на веб-сайте расширением скрипта содержимого Chrome , но все еще не можете его понять. В пробном запуске я пытаюсь заменить все буквы "a" на странице буквами "Z".

Вот мой Manifest.json:

{
  "name": "My Chrome extension",
  "version": "0.1",
  "browser_action": {
    "default_icon": "icon.png"
},

"permissions": [
    "tabs", "http://*/*", "https://*/*"
],

"content_scripts": [{
    "matches": ["http://*/*", "https://*/*"],
    "js": ["myscript.js"]
}]

}

Myscript.js:

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(
  null, {code:"document.body.innerHTML = document.body.innerHTML.replace(new RegExp("a", "g"), "Z")"});
});

Но это не работает. Если я включу только одну строку в Myscript.js:

document.body.innerHTML = document.body.innerHTML.replace(new RegExp("a", "g"), "Z");

тогда все буквы «a» заменяются на «Z», как только страница загрузится, но это не моя цель, так как я хочу, чтобы она работала только после нажатия кнопки расширения.

Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 17 марта 2012

Вы настроили свое расширение для внедрения кода с помощью скрипта содержимого.Сценарий содержимого будет вставлен в любую страницу, которая соответствует вашему полю совпадений.Вам нужно только внедрить скрипт, если они нажмут на действие вашего браузера.Для этого у вас может быть фоновая страница, которая прослушивает событие chrome.browserAction.onClicked и реагирует на него.Или у вас может быть страница по умолчанию для вашего действия браузера, которая внедряет код в страницу, и если ваш файл window.close является частью скрипта, это предотвратит появление любого всплывающего окна и позволит вам избежать использования фоновой страницы.избегать использования фоновой страницы, когда это возможно).

Для примера первого метода, посмотрите этот пример ....
http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/browserAction/make_page_red/

А вот пример второго метода (который является модифицированнымверсия образца set_page_color) ...
manifest.json

{
  "name": "A browser action that changes the page color.",
  "version": "1.0",
  "permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
  "browser_action": {
      "default_title": "Set this page's color.",
      "default_icon": "icon.png",
      "default_popup": "popup.html"
  },
  "manifest_version": 2
} 

popup.html

<!doctype html>
<html>
  <head>
    <script src="popup.js"></script>
  </head>
  <body>
  </body>
</html>

popup.js

chrome.tabs.executeScript(null,{file:"injectedCode.js"});
window.close();

injectedCode.js

// This was just a quick look at changing text on a page
// there could be more tags you should ignore and there could be a better way of doing this all together
var ignoreTags = ["NOSCRIPT","SCRIPT","STYLE"];
var nodeIterator = document.createNodeIterator(
    document,
    NodeFilter.SHOW_TEXT,
    function (node){
      var parentTag = node.parentNode.tagName.toUpperCase();
      if ( ignoreTags.indexOf(parentTag)==-1 ) {return true} else {return false};
    },
    false
);

var node;
while ( (node = nodeIterator.nextNode()) ) {
   node.data = node.data.replace(/a/g, 'z');
}

ПРИМЕЧАНИЕ
Как Роб У указывает накомментарии chrome.tabs и chrome.browserAction нельзя использовать в скрипте содержимого, поэтому chrome.browserAction.onClicked необходимо использовать на фоновой странице.

0 голосов
/ 17 марта 2012

Код в myscript.js - это то, что вводится на страницу.Это не работает так, как вы сейчас настроили, потому что вы автоматически внедряете в каждую страницу код, который вводится для выбора страниц.Вам необходимо переместить код myscript.js в background_page, который будет вводиться только при нажатии кнопки.

https://code.google.com/chrome/extensions/background_pages.html

...