从Chrome扩展程序修改表格的insertRow

时间:2012-01-07 20:59:32

标签: javascript dom google-chrome-extension

我正在尝试从Chrome扩展程序修改表格的insertRow函数。

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

但是当它被调用时,而不是fakeInsertRow,正在调用本机函数。 在其他情况下,如果我在javascript控制台中吃相同的代码 - 一切正常。

1 个答案:

答案 0 :(得分:2)

这不起作用的原因是Chrome扩展程序添加的JavaScript(通常位于内容脚本中)在其自己的沙箱中执行,该沙箱无法访问加载页面的JavaScript环境。

以下是来自Chrome Extension的JavaScript的限制:

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扩展程序向页面的DOM添加script元素,引用外部托管文件。以这种方式插入的JavaScript将在页面JavaScript环境中运行(这意味着它将无法用于Chrome扩展程序)。

Chrome扩展程序JavaScript类似于:

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

然后,位于http://externally/hosted/javascript.js的文件中的JavaScript代码可能就是您上面的代码。