Google Chrome用のページアクション拡張を作成しています。この拡張機能は、ロード後に次のスクリプトを検索ページに挿入します。スクリプトは、クラス "f_foto"(通常は10個のアイテム)のすべての出現を見つけた後、それぞれの最初のリンクを見つけ、これらのhrefを配列に入れてから、配列を繰り返して各リンクの新しいウィンドウを開き、結果。それがやるべきことです。新しいウィンドウが読み込まれたときにスクリプトを再開する方法
最後の部分を除いて、このコードですべて正常に機能します。新しいウィンドウが新しいタブで開きます(私にはタブ権限があります)が、スクリプトの終了後にのみロードが完了します。新しいウィンドウはそれぞれ同じタブの前のウィンドウに上書きされます。内容を最初に調べることができればOKです。したがって、スクリプトが終了したときにデバッガを使用せずに実行すると、新しいタブには配列の最後の項目が含まれ、フォーカスは新しいタブに表示されます。私が見る限り、handleResponseは決して呼び出されません。
DOMインスペクタで実行してwindow.openで停止すると、タイトルに「空白について」と表示され、読み込み中であることを示す回転するものが表示されます。 detailWin=window.open(profileLinks[i], "Detail Window");
が実行された後でも、コードをステップしてdetailWinは未定義のままです。私はwindow.onload = handleResponse;
をdetailWin.onload =handleResponse;
に置き換えようとしましたが、この場合detailWinは定義されていません。
新しいウィンドウが読み込まれたときに発生するイベントリスナーを追加して、handleResponseを実行する必要があります。はい?いいえ?
//PEEK.JS//
var req;
var detailWin;
var profileLinks = new Array();
function handleResponse()
{
// var contentDetail = document.getElementsByClassName("content");
alert("Examine Detail Page Here");
};
//drag off the f_foto class
var searchResult = document.getElementsByClassName("f_foto");
alert("Found Class f_foto "+searchResult.length+" times.");
//collect profile links
for (var i = 0; i<searchResult.length; ++i)
{
var profileLink=searchResult[i].getElementsByTagName("a");
profileLinks[i]=profileLink[0].href;
// alert(i+1+" of "+searchResult.length+" "+profileLinks[i]+" length of "+profileLinks[i].length);
}
for (var i = 0; i<searchResult.length; ++i)
{
//DYSFUNCTIONAL CODE: New window finishes loading only after script completes, how to execute handleResponse?
detailWin=window.open(profileLinks[i], "Detail Window");
window.onload = handleResponse;
}
IFRAMEにロードする別のオプションはありませんか? –
非常にエレガント、ありがとうございます。配列をバックグラウンドページに渡してprofileLinksへの参照として渡すことはできますか?それとも、profileLinks [i]を繰り返してjson構造を構築する必要がありますか? – Jerome
@Jeromeあなたは配列を渡すことができます – serg