Выполнить код Crossrider перед загрузкой страницы

Я играю с созданием некоторых расширений браузера с помощью Crossrider. Мне нужен некоторый код для выполнения перед загрузкой страницы, прежде чем будут отображаться какие-либо элементы DOM. Возможно ли это с 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, он перенаправляется в Google, а затем получает какое-то забавное сообщение об этом. Они также получат предупреждения для таких сайтов, как 4chan, торрент-сайты и т. д.

Итак, в настоящее время, если я реализую этот код и перехожу к bing, он мигает DOM, а затем перенаправляет. Я пытаюсь предотвратить это. Спасибо!

Я тестирую на Win 7 и Chrome

Спасибо!


person Dan    schedule 21.02.2014    source источник
comment
Как правило, метод appAPI.dom.onDocumentStart.addJS запускается при первой же возможности для каждого браузера. Однако, чтобы попытаться помочь вам в дальнейшем, мне нужна дополнительная информация, такая как (1) какую операционную систему вы тестируете (2) какой браузер вы тестируете (3) пример кода (4) шаги для воспроизведения проблемы. [Раскрытие информации: я сотрудник Crossrider]   -  person Shlomo    schedule 23.02.2014
comment
Спасибо за ответ, Шломо, я отредактировал свой вопрос со всей дополнительной информацией, которую вы запросили.   -  person Dan    schedule 23.02.2014


Ответы (1)


@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]

person Shlomo    schedule 24.02.2014
comment
Вам не нужно запускать функцию. Он запускается автоматически, так как является частью фонового кода. - person Shlomo; 17.06.2015