我最近通过KBX在TomatoFlix中发现了一个错误。当用户登录Netflix(与未登录的界面不同)时,评级横幅会被添加两次:
我在规则中添加了一些代码,以显示规则何时被触发。代码现在看起来像这样:
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
想法?
答案 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
}
}