1

私のマニフェストは次のようになります。

{
  "manifest_version": 2,

  "name": "Facebook Extension",
  "version": "1.0",

  "browser_action": {
    "default_icon": "images/fbh.png",
    "default_popup": "fbh-popup.html"
  },

  "permissions": [
    "storage",
    "background",
    "tabs",
    "http://www.facebook.com/*",
    "https://www.facebook.com/*"
  ],

  "content_scripts": [
    {
      "matches": [
        "http://www.facebook.com/*", 
        "https://www.facebook.com/*"
      ],
      "js": ["js/jquery-1.9.1.min.js", "js/fbh-main.js"],
      "css": ["css/fbh-main.css"],
      "run_at": "document_end"
    }
  ],

  "background":{
    "persistent": true,
    "scripts": ["js/jquery-1.9.1.min.js","js/fbh-background.js"]
  }
}

Facebook 内の新しいページに移動するたびに、コンテンツ スクリプトを挿入したいと考えています。たとえば、ユーザーのプロファイルをクリックすると、コンテンツ スクリプトが挿入されます。

私のバックグラウンドページには、次のリスナーがあります。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) {
    console.log(changeInfo);
    if (changeInfo.status === 'complete') {
        chrome.tabs.executeScript(null, {file: "js/fbh-main.js"});
    }
});

ただし、これにはいくつかの問題があります。まず、この関数はコンテンツ スクリプトをすべてのページに挿入しようとします。マニフェストのアクセス許可を読み取ることができる必要があります。第 2 に、www.facebook.com から開始すると、コンテンツ スクリプトが本来の機能を実行します。しかし、そこから「foo」のプロファイルをクリックして www.facebook.com/foo に移動すると、コンテンツ スクリプトが挿入されます (console.log メッセージで証明されます) が、想定されていることを実行しません。 . www.facebook.com/foo に直接移動すると、コンテンツ スクリプトが読み込まれ、機能するため、挿入が早すぎると思います。

これを行うより良い方法はありますか?

4

2 に答える 2

1

このコードを試してください

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo,tab) {
    console.log(changeInfo);
    if ((tab.url.indexOf("http://www.facebook.com/") !=-1 || tab.url.indexOf("https://www.facebook.com/") !=-1) && changeInfo.status === 'complete') {
        chrome.tabs.executeScript(tabId, {file: "js/fbh-main.js"});
    }
});
  • chrome.tabs.executeScript(null,現在のウィンドウのアクティブなタブでスクリプトを実行します。これは、ユーザーの操作で変更される可能性があり、chrome.tabs.executeScript(tabId対象のタブでのスクリプトの挿入が常に保証されます。
  • chrome.tabs.onUpdated.addListenertab.url.indexOf("https://www.facebook.com/")すべてのタブで起動し、フェイスブックページにスクリプトが確実に挿入されるようにフィルターを追加しました。

問題が解決しない場合は、マニフェスト、コンテンツ スクリプト、および関連ファイルを共有してください

于 2013-02-17T10:05:04.080 に答える
0

スクリプトがすぐに実行される場合は、いつでも$.(your code here);jQueryを使用できます

編集:自動更新の問題については、コンテンツスクリプトにリスナーを追加するだけです

document.addEventListener("DOMSubtreeModified", function(event){
    //something on the page has changed
});
于 2013-02-17T00:51:27.627 に答える