5

これは、アマチュアではない人にとってはすぐにわかると思いますが、私は何日もこれに悩まされてきました.

ドキュメントの開始時にスクリプトを実行する Chrome 拡張機能を作成しています。特定の DIV の HTML を読み込み時に書き換えたいが、それらがユーザーに表示される前に (そのため、カスタム HTML に不用意に置き換えられる前に、ユーザーにはサイトの HTML が表示されません)。私が使用しようとしている方法は次のようになります。

addEventListener('DOMNodeInserted', function(event){
    if(event.relatedNode.innerHTML.indexOf("contentArea")>-1){
        writeContentArea();
    }
}, false);

function writeContentArea(){

    var divtowrite = document.getElementById('contentArea');
    include(divtowrite,"contentArea.html"); //my AJAX include function

}

ここでの問題は、ページが読み込まれて JS が実行されると、div が置き換えられる前に読み込まれることです。奇妙なことに、サイドバーなどの別の div でこれを試してみると、期待どおりに動作します。つまり、div はユーザーに表示される前に置き換えられます。一部の div では機能し、他の div では機能しない理由がわかりません。

これが関連しているかどうかはわかりませんが、Chrome 側には次のようなものがあります。

chrome.tabs.getSelected(null, function(tab) {

    if(tab.url.indexOf("search.php") > -1){
        chrome.tabs.executeScript(null,
            {file: "fhrun.js", allFrames: false, runAt: "document_start"}
        );
    }

});

これが機能しない理由、または使用すべきより良い方法についてのアイデアはありますか? ありがとう!!

4

1 に答える 1

0

これが探しているアプローチであるかどうかはわかりませんが、CSS を挿入して初期ロード時にコンテンツ領域を非表示にし、コンテンツを変更したら JavaScript で表示されるように設定することを検討しましたか?

CSS ファイルは次のようになります。

#contentArea { display:none; } 

また

#contentArea { visibility:hidden; }

そして、次を使用してそれを注入します:

    chrome.tabs.insertCSS(null, 
{file: "youfile.css", allFrames: false, runAt: "document_start"});

次に、コンテンツ変更関数を次のように変更します。

function writeContentArea(){
    var divtowrite = document.getElementById('contentArea');
    include(divtowrite,"contentArea.html"); //my AJAX include function
    divtowrite.style.display = 'block';
}
于 2012-11-07T21:53:23.017 に答える