【问题标题】:exit document.evaluate退出文档。评估
【发布时间】:2010-12-11 23:03:33
【问题描述】:

我正在使用 Greasemonkey。如果xpathExpression 不存在,则整个脚本将停止。

document.evaluate(
    xpathExpression,
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

有没有办法阻止 document.evaluate 并继续让脚本运行?

错误:
“错误:表达式不是合法表达式。”

【问题讨论】:

  • 我使用了 casablanca 的方法,并不是说 xpathexpression 未定义或为空。它只是xpath不存在。谢谢你们。
  • @guest:如果 casablanca 的方法适合您,请将其标记为答案。 (单击复选标记。)
  • 不是 XPath 问题,而是 javascript 代码风格(如:如何处理错误的参数值?)
  • @Alejandro:一个 XPath 问题。真正的问题是如何避免无效的搜索/选择器——这需要了解 XPath 语法和工具。
  • @Brock Adams:我不同意。 XPath 表达式在哪里更正?这就像调用任何可能引发异常的函数。请回滚您的版本。

标签: javascript xpath greasemonkey document.evaluate


【解决方案1】:

try/catch 在您无法预测错误会如何发生时,真的应该作为最后的手段使用。

请考虑这个:

if (typeof xpathExpression !== "undefined" && xpathExpression !== "") {
    document.evaluate(
        xpathExpression,
        document,
        null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null);
}

【讨论】:

    【解决方案2】:

    您可以将其包装在 try-catch 块中:

    try {
      document.evaluate(...);
    } catch (ex) {
      // something went wrong
    }
    

    【讨论】:

      【解决方案3】:

      实例化变量 xpathExpression 然后你可以使用:

      if (xpathExpression)
      document.evaluate(...);
      

      不需要 try/catch 块

      【讨论】:

      • 这是本的回答。而且,从 OP 来看,xpathExpression 不是空的,它是一些无效的字符串/选择器。
      • 拥有无效表达式并使用 try-catch 块停止它的意义何在?为什么不直接修复表达式?
      • 我同意,但有时人们会发现使用 try-catch 块更容易测试表达式无效。
      猜你喜欢
      • 1970-01-01
      • 2020-08-03
      • 2022-06-11
      • 1970-01-01
      • 2017-06-06
      • 2014-10-14
      • 1970-01-01
      • 2021-12-23
      • 2011-12-19
      相关资源
      最近更新 更多