Расширение KBX вызывает набор правил дважды - PullRequest
2 голосов
/ 19 апреля 2011

Недавно я обнаружил ошибку в TomatoFlix через KBX.Когда пользователь входит в систему на Netflix (отличается от интерфейса без входа в систему), баннер рейтинга добавляется дважды:

Doubled rating banner

Я добавил некоторые выбросы в свои правилапоказать, когда правило увольняют.Код теперь выглядит следующим образом:

rule netflix_loggedin {
    select when pageview "movies.netflix.com/.*?Movie/(.*)/" setting (movieTitle)
    pre {
      title = movieTitle.replace(re/[-_]/g, " ");
      div = getRatings(title, "", "lycoflix");
    }
    emit <|
        console.log("TomatoFlix fired!");
    |>;
    before("p.synopsis", div);
    }

rule netflix_two {
    select when pageview "movies.netflix.com/.*?Movie/(.*)/" setting (movieTitle)
    emit <|
        console.log("TomatoFlix second rule fired!");
    |>;
}

Консоль JavaScript показывает следующие четыре строки:

TomatoFlix fired!
TomatoFlix second rule fired!
TomatoFlix fired!
TomatoFlix second rule fired!

Этого не происходит с букмарклетом или с автономным расширением браузера.Только в KBX.

Блок dispatch содержит два домена: www.netflix.com и movies.netflix.com

Идеи?

1 Ответ

3 голосов
/ 19 апреля 2011

Хотя я испытывал двойное срабатывание правил при использовании комбинации расширений браузера, тегов сайта и / или прокси-серверов для развертывания наборов правил, я не испытывал двойного срабатывания правил только с KBX. Чтобы помочь изолировать проблему, вы отключили все другие приложения KBX и все другие расширения браузера на основе Kynetx?

В то же время обходной путь заключается в том, чтобы ввести в действие правило охраны. Это защитное правило будет проверять наличие тега в DOM, и если он не существует, он продолжит работу. В противном случае остановитесь. Вот образец:

rule CodeMonkey_Hack {
  select when pageview ".*"
    pre {
      tagMonkey = "<div id='CodeMonkey' style='display:none;'>CodeMonkey</div>";
      CodeMonkey = 0;
    }
    {
      emit <|
        CodeMonkey = $KOBJ("#CodeMonkey").length;
        if (!CodeMonkey) {
          $KOBJ("body").append(tagMonkey);
          app = KOBJ.get_application("a169x274");
          app.raise_event("impactblog_init", {});
        }
      |>;
    }
    always {
      last
    }
}
...