2011-11-15 72 views
1

我正在製作Google Chrome擴展程序。我的擴展程序目前擴展了內容區域和標題,爲寶石容器中的另一個圖標(通知和好友請求所在的位置)騰出空間並添加了圖標。當第一次加載頁面時,它工作正常,但當您轉到網站上的其他頁面,然後回到家時,佈局會變得很糟糕。每次使用Google Extensions加載頁面時都要運行內容腳本?

由於這不是代碼問題(因爲它在第一次加載頁面時工作正常),所以我想知道是否有一種方法可以在每次加載頁面時運行內容腳本。這是可能的,或者我可以注入JavaScript的每次加載時使用不同的方法我的Facebook?

回答

0

我發現一個解決方法,通過使用setInterval()每毫秒運行代碼(或至少不是總是運行的代碼)。

顯然,除非我誤解,Chrome每次瀏覽器會話運行一次代碼,因此使用setInterval()是最佳選擇。雖然,奇怪的行爲是,Chrome曾經運行過我的代碼的一部分,然後在那之後,除非某些情況得到滿足。儘管如此,在這種情況下創造了奇蹟。

1

據我瞭解,每次加載頁面時,代碼都會正確注入,但是當用戶選擇不同的選項卡時,則返回需要代碼才能再次運行的代碼?

看看Page Visibility API。您應該能夠聽取visibilitychange事件並再次運行您的代碼。

+0

不exactly-切換標籤在第一次注入時會保留代碼的結果。我需要的是在Facebook上的任何頁面點擊Facebook按鈕或單擊主頁時再次運行它。出於某種原因,我的腳本部分「撤銷」了自己,而其他人則保留了注射第一次的結果。 – Purag

+0

哦,所以你在談論Facebook何時使用AJAX加載頁面,他們打破/刪除了一些更改?使用[onpopstate](https://developer.mozilla.org/en/DOM/window.onpopstate)和[onhashchange](https://developer.mozilla.org/en/DOM/window.onhashchange)並檢查您的變化已經恢復。根據需要添加回來。 – abraham

+0

「onpopstate」和「onhashchange」都沒有效果。事實上,'onhashchange'開始搞砸了配置文件。 – Purag

0

您應該將腳本作爲內容腳本添加到清單文件中。後臺頁面僅在每個瀏覽器會話中執行一次。

清單:

{ 
    "name": "", 
    "version": "", 
    "description": "", 
    "icons": { "16": "icon16.png", 
      "48": "icon48.png", 
      "128": "icon128.png"}, 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["go.js"], 
     "all_frames":true 
    } 
    ], 
    "permissions": [ 
    "*://*/*" 
    ] 
} 

內容腳本文件(go.js):

// your stuff 

PS:此方法無法在Chrome內部網頁工作...

+0

我以前曾經將它用作內容腳本,但情況更糟。我改變了它從後臺頁面運行,並使問題更好一些(通常比實際運行)。 – Purag

相關問題