2012-01-07 4 views
0

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

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

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

ответ

2

Причина, по которой это не работает, заключается в том, что 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 (Хлоп, кажется, плохо), то один из способов для выполнения JavaScript в контексте страницы необходимо создать внешний XML-файл, затем используйте расширение 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 может быть код, который вы имеете выше.