Изменение таблицы insertRow из расширения Chrome - PullRequest
0 голосов
/ 08 января 2012

Я пытаюсь изменить функцию insertRow таблицы из расширения Chrome.

oldInsRowFunc = document.getElementById(id).insertRow;
document.getElementById(id).insertRow = fakeInsertRow;
// .......
function fakeInsertRow (ind) {
    alert("fakeInsertRow called");
}

Но когда он вызывается, вместо fakeInsertRow вызывается нативная функция.В другом случае, если я запускаю тот же код в консоли javascript - все работает нормально.

1 Ответ

2 голосов
/ 15 января 2012

Причина, по которой это не работает, заключается в том, что JavaScript, добавляемый расширением Chrome (обычно в скрипте содержимого), выполняется в своей собственной песочнице, которая не имеет доступа к среде JavaScript, в которую загружена страница.

Вот ограничения JavaScript, которые происходят от Chrome Extension :

Here are some examples of what content scripts can do:
   * Find unlinked URLs in web pages and convert them into hyperlinks
   * Increase the font size to make text more legible
   * Find and process microformat data in the DOM

However, content scripts have some limitations. They cannot:
   * Use chrome.* APIs (except for parts of chrome.extension)
   * Use variables or functions defined by their extension's pages
   * Use variables or functions defined by web pages or by other content scripts

Если ваша цель состоит в том, чтобы действительно обернуть / переопределить собственный метод доступа JavaScript / DOM (yikes, кажется плохим), то один из способов выполнить JavaScript в контексте страницы - создать файл JavaScript с внешним размещением, а затем использовать Расширение Chrome для добавления элемента script в DOM страницы, который ссылается на внешний файл. JavaScript, вставленный таким образом, будет работать в среде JavaScript страниц (это означает, что он не будет доступен для расширения Chrome).

Расширение Chrome JavaScript будет выглядеть примерно так:

document.body.appendChild(document.createElement("script")).src = "http://externally/hosted/javascript.js";

Тогда код JavaScript в файле, расположенный по адресу http://externally/hosted/javascript.js, может быть кодом, который вы указали выше.

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