KBX扩展调用规则集两次

时间:2011-04-19 17:03:46

标签: krl

我最近通过KBX在TomatoFlix中发现了一个错误。当用户登录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.commovies.netflix.com

想法?

1 个答案:

答案 0 :(得分: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
    }
}