2014-02-21 113 views
2

我正在使用Crossrider構建一些瀏覽器擴展。在呈現任何DOM元素之前,我需要一些代碼在頁面加載之前執行。 Crossrider可能嗎?在頁面加載之前執行Crossrider代碼

我已經嘗試在背景範圍內使用appAPI.dom.onDocumentStart.addJS 但沒有運氣。在我的代碼執行之前,我仍然看到頁面部分顯示。

感謝

更新更多詳細信息

的什麼,我試圖做一個例子是重定向不良網站,以好的擴展。基本上,如果用戶點擊我們列表中的不良網站,它會將它們重定向到一個好的選擇並給他們一個消息。我正在研究重定向部分,這裏有一些示例代碼。

裏面我background.js

appAPI.ready(function($) { 
    appAPI.dom.onDocumentStart.addJS({resourcePath:'main.js'}); 

}); 

然後,我有一個main.js文件在我的資源

if(window.location.href == "http://www.bing.com/"){ 
    console.log("You are at Bing... That's bad m'kay."); 
    window.location = "http://www.google.com"; 
} 

在這種情況下,如果用戶進入到Bing他們重定向谷歌,然後會得到一些有趣的消息。他們也會得到像4chan,洪流網站等網站的警告。

所以目前如果我實現這個代碼,並去bing它閃爍的DOM,然後重定向。我正試圖阻止這一點。謝謝!

我在Win 7和Chrome上測試

謝謝!

+0

一般來說,appAPI.dom.onDocumentStart。 addJS方法會盡早爲每個瀏覽器運行。但是,爲了進一步嘗試和幫助您,我需要更多信息,例如(1)您正在測試哪個操作系統(2)您正在測試哪個瀏覽器(3)示例代碼(4)重現問題的步驟。 [披露:我是Crossrider員工] – Shlomo

+0

感謝您的回覆Shlomo,我編輯了我的問題並提供了您請求的所有其他信息。 – Dan

回答

2

@丹感謝您提供其他信息,特別是您試圖實現的場景。

在這種情況下,只需使用onBeforeNavigate方法即可實現目標,而無需在文檔啓動時運行。因此,根據您的background.js示例代碼中的解決辦法是這樣的:

appAPI.ready(function() { 
    var resourceArray = ['http://www.bing.com/']; 
    appAPI.webRequest.onBeforeNavigate.addListener(function(details, opaqueData) { 
    // Where: 
    // * details.pageUrl is the URL of the tab requesting the page 
    // * opaqueData is the data passed to the context of the callback function 

    // Redirect requests for blocked pages 
    for (var i = 0; i < opaqueData.length; ++i) { 
     if (details.pageUrl.indexOf(opaqueData[i]) !== -1) { 
     console.log("You are at Bing... That's bad m'kay."); 
     return { redirectTo: 'http://www.google.com' }; 
     } 
    } 
    }, resourceArray); // resourceArray is the opaque parameter that is passed to the callback function 
}); 

[披露:我是一個Crossrider員工]

+0

謝謝!這工作完美。 – Dan

+0

如何在瀏覽器啓動時觸發一個函數。 –

+0

您不需要觸發該功能。它會自動啓動,因爲它是後臺代碼的一部分。 – Shlomo

相關問題