2014-02-21 5 views
2

Я играю с созданием некоторых расширений браузера с помощью Crossrider. Мне нужен какой-то код для выполнения перед pageload, прежде чем какие-либо элементы DOM будут визуализированы. Возможно ли это с помощью Crossrider?Выполнение кода кросс-кода до pageload

Я пробовал использовать appAPI.dom.onDocumentStart.addJS в фоновом режиме, но не повезло. Я до сих пор вижу, что страница отображается частично до моего кода.

Благодаря

UPDATE с Подробнее

Пример того, что я пытаюсь сделать, это расширение, которое перенаправляет плохие сайты на хорошие. В принципе, если пользователь попадает на плохой сайт в нашем списке, он перенаправляет их на хорошую альтернативу и дает им сообщение. Я работаю над частью переадресации, и вот несколько примеров кода.

Внутри моего 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"; 
} 

В этом случае, если пользователь переходит к Бингу они попадают для google, а затем получите какое-то смешное сообщение об этом. Они также получат предупреждения для таких сайтов, как 4chan, торрент-сайты и т. Д.

Так что, если я реализую этот код и перейду на bing, он начнет мигать DOM, а затем перенаправляет. Я пытаюсь предотвратить это. Благодаря!

Я тестирование на Win 7 и Chrome

Спасибо!

+0

В общем, appAPI.dom.onDocumentStart. Метод addJS запускается при первой возможности для каждого браузера. Однако, чтобы попытаться помочь вам, мне нужна дополнительная информация, например: (1) какая операционная система вы тестируете на (2) какой браузер вы тестируете (3) пример кода (4) шаги для воспроизведения проблемы. [Раскрытие: я сотрудник Crossrider] – Shlomo

+0

Спасибо за ответ Шломо, я отредактировал свой вопрос со всей дополнительной информацией, которую вы запросили. – Dan

ответ

2

@ Dan Спасибо за предоставление дополнительной информации, в частности того сценария, который вы пытаетесь достичь.

В этом случае вы можете достичь своей цели, просто используя метод 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

Смежные вопросы