2012-01-07 6 views
0

Chromeの拡張機能からテーブルのinsertRow関数を変更しようとしています。それは呼ばれていますときChromeの拡張機能からテーブルのinsertRowを変更する

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

しかし、代わりにfakeInsertRowのネイティブ関数が呼び出されています。 他のケースでは、私はjavascriptコンソールで同じコードを昼食する - すべて正常に動作します。

答えて

2

これは機能しないのは、Chrome拡張機能(通常はコンテンツスクリプト内)によって追加されたJavaScriptが、ページが読み込まれる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アクセスメソッドをオーバーライド(む〜、悪いと思われる)、そして一つの方法:ここで

Chrome Extensionから来たJavaScriptの制限がありますこのページのコンテキストでJavaScriptを実行するには、外部にホストされているJavaScriptファイルa次に、Chrome拡張機能を使用して、外部でホストされているファイルを参照するページのDOMに script要素を追加します。この方法で挿入されたJavaScriptは、JavaScript環境で実行されます(つまり、Chrome拡張機能では使用できません)。その後 http://externally/hosted/javascript.jsにあるファイル内のJavaScriptコードは、あなたが上記の持っているコードである可能性があり

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

クローム拡張JavaScriptがようなものになるだろう。

関連する問題