您的代码应该可以工作。
这是另一个与您类似的示例,它对我有用。
ruleset a60x535 {
meta {
name "function-scope-test"
description <<
function-scope-test
>>
author "Mike Grace"
logging on
}
global {
emit <|
function showMeTheMoney() {
alert("42!");
return 42;
}
|>;
}
rule call_global_function {
select when pageview ".*"
{
emit <|
var amount = showMeTheMoney();
alert("amount: "+amount);
function cool() {
alert("yes");
}
|>;
}
}
}
在 example.com 上使用书签运行应用程序的结果:
当 KRL 生成 JavaScript 以在浏览器页面上运行时,它会将代码放入闭包中,这可能会产生一些意外行为。在您的代码和我的示例中,发出的 JavaScript 在同一范围内运行,因此函数调用可以相互访问。如果您让 JavaScript 监视按钮单击,然后调用全局块中发出的函数,您可能会遇到单击函数与全局发出的 JavaScript 函数不在同一范围内的问题。