2

最近、KBXを介してTomatoFlixにバグを見つけまし。ユーザーがNetflixにログインすると(ログインしていないインターフェイスとは異なります)、評価バナーが2回追加されます。

二重評価バナー

ルールがいつ実行されるかを示すために、いくつかのエミットをルールに追加しました。コードは次のようになります。

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コンソールには、次の4行が表示されます。

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

これは、ブックマークレットやスタンドアロンのブラウザ拡張機能では発生しません。KBXでのみ。

ブロックには2つのdispatchドメインがあります:www.netflix.commovies.netflix.com

アイデア?

4

1 に答える 1

3

ルールセットの展開にブラウザー拡張機能、サイトタグ、プロキシサーバーを組み合わせて使用​​した場合、二重ルールの実行を経験しましたが、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
    }
}
于 2011-04-19T18:19:44.447 に答える