0

私は今日、パッケージ化されたクロムアプリケーションを使いこなし、コードインジェクション機能でどのくらいのウェブサイトを操作できるか確認しています。Google Chromeのアプリケーションコードの注入が特定の要素で機能しない

かなりたくさんの要素が含まれているので、私はsandboxとしてtwitter.com/#!/loginを使用してきました。何らかの理由で、次のコードは、何もしない

chrome.tabs.create({url: 'https://twitter.com/#!/login/'}, function (tab) { 
     chrome.tabs.executeScript(tab.id, {code: "jQuery('.main').remove();"}, function() { 
      console.log('code executed'); 
     }); 
    }); 

この作業を行うので、私は、まったくのページにアクセスすることができないようにされていません。

chrome.tabs.create({url: 'https://twitter.com/#!/login/'}, function (tab) { 
     chrome.tabs.executeScript(tab.id, {code: "jQuery('#page-container').remove();"}, function() { 
      console.log('code executed'); 
     }); 
    }); 

私は」マニフェストに適切にjQueryをロードし、すべてのサイトにも権限を与えました。

実際、#page-containerの範囲外のページの任意の要素にアクセスできるようです。

Chromeデベロッパーコンソールを使用してページを混乱させると、jQueryを使用してすべての要素に簡単にアクセスできます(これはページがネイティブで使用しているバージョンであると認識していますが)。

私は#ページ-コンテナのタグに奇妙な何かに気づいた:

なしでクラス属性があり、これは私をブロックすることができ...記号や値に等しいですか?

注入されたコードをページに追加できない理由についてのご意見はありますか?

編集: OK、回避策が見つかりました。 #page-containerの値を保存し、setIntervalを使用して変更をチェックすると、動的な問題が処理されます。

divの値の変更を監視できるイベントハンドラはありません。

chrome.tabs.create({url: 'https://twitter.com/#!/login/'}, function (tab) { 
     chrome.tabs.executeScript(tab.id, {code: "var initial = jQuery('#page-container').html();var interval = setInterval(function(){var final = jQuery('#page-container').html();if(initial !== final){clearInterval(interval);jQuery('.main').remove();}},10);"}, function() { 
      console.log('code executed'); 
     }); 
    }); 

答えて

1

何のクラスmainはでありません:私はちょうどのものをチェックする間隔を使用したように感じるがここ

は、この問題を回避するコードです...ので、昔ながら、それは時々必要であるにも関わらず、これらの日ですページソース、つまり、動的にjavascriptでページに追加されています。タブが作成された直後にスクリプトを実行しているので、このdivがまだページに追加されていない可能性があります。

+0

ありがとう、それはまさにそれが機能していなかった理由です。私は最初にそれを理解していないために自分自身を笑っています! –

+0

さらに、 'if(jQuery( '。main')。length){}'のようなif文で特定の要素が存在するかどうかを調べることができます。 –

関連する問題