gpt4 book ai didi

javascript - 停止 JS 代码中的 getClientId() 计算

转载 作者:行者123 更新时间:2023-11-28 15:47:58 26 4
gpt4 key购买 nike

我在 XPage 上发现了一些有趣的 javascript 代码行为

//'rdoGeschlecht1' is present on page Basis (no problems there), 
//but not on page 'Stufe1'.
var level = "Stufe1";
if(level == "Basis")
{
alert("1");
// var rdoGeschlecht1 = '#{javascript:getClientId("rdoGeschlecht1")}';
}
else if(level == "Stufe1")
{
alert("2");
}

在不存在该元素的页面上执行时,上面的代码总是以错误结束 - “Ungültiger Komponentenname rdoGeschlecht1 kann in getClientId nicht aufgelöst werden。” - 在我看来,即使在实际执行中没有使用该行,甚至在未注释时,Notes 也会尝试解析对象 ID。

当然,我找到了一种快速而肮脏的解决方法,但我肯定不是第一个偶然发现这种行为的人,我真的很想知道经验丰富的 XPages 程序员将如何解决这个问题?

最佳答案

问题是您正在注释掉将在浏览器上运行的客户端 JavaScript。但#{javascript:中的服务器端JavaScript代码(需要在服务器上运行)没有被注释掉。

也许这将有助于解释将 SSJS 或 EL 放入字符串属性(或者在本例中为脚本 block )中会发生什么情况。因为关键是CSJS没有在服务器上解析,只是作为字符串传递给浏览器。

解析器读取字符串并查找 #{javascript: ,这告诉它需要将以下代码(直到结束 })传递给 SSJS 解析器,并将结果添加到写入浏览器的字符串中。该 SSJS block 中以“//”开头的任何行都将被省略。但解析器不会考虑 #{javascript: 之外的任何内容,因为那只是传递给浏览器的文本。浏览器将整个事情解释为客户端 JavaScript。

希望这能澄清为什么它会这样工作。

如果您想注释掉包含 SSJS 的脚本 block 中的一行,并且希望阻止 SSJS 运行,则需要注释掉 CSJS(这样浏览器就不会运行它)和 SSJS (因此服务器不会运行它)。

关于javascript - 停止 JS 代码中的 getClientId() 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com