2

我最近通过 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.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 回答