【问题标题】:Htmlunit ScriptException "console" is not definedHtmlunit ScriptException“控制台”未定义
【发布时间】:2012-01-31 05:12:13
【问题描述】:

我正在使用 htmlunit 2.9 并且在 java 脚本解析中由于console 在以下异常中出现脚本异常

function debug(o){
  if (console && console.log){
    console.log(o)
  }
};

堆栈跟踪

EcmaError:
    lineNumber=[168]
    column=[0]
    lineSource=[null]
    name=[ReferenceError]
    sourceName=[script in http://localhost:808/mypage/ll.html from (154, 36) to (301, 14)]
    message=[ReferenceError: "console" is not defined. (script in http://localhost:8080.com/mypage/ll.html from (154, 36) to (301, 14)#168)]
com.gargoylesoftware.htmlunit.ScriptException: ReferenceError: "console" is not defined. (script in http://localhost:8080.com/mypage/ll.html from (154, 36) to (301, 14)#168)
         at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595)
         at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
         at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
         at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:545)
         at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:520)
         at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:896)
         at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:195)
         at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:214)

如果我在 Firefox 上尝试指定页面,它可以正常工作,我已经尝试了 v 3.6 和 9.0.1。

我也尝试设置setThrowExceptionOnScriptError(false) 以避免异常但引擎停止或在出现错误后不解析javascript。

javascript引擎有什么办法可以理解javascript中的console

【问题讨论】:

标签: java javascript rhino htmlunit


【解决方案1】:

您的代码确实使用了 java 脚本控制台对象,并且直到当前版本才支持它,并且承诺在下一个版本中支持它,因为据说 here

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      您的if 条件结构不正确:

      if (console && console.log){
      

      如果没有设置,第一个 if 会抛出错误;在未定义的环境中访问console 就像访问任何未定义的变量一样;它会抛出一个ReferenceError

      试试:

      if( typeof console != "undefined" && console.log ) {
      

      或者:

      if(window.console && console.log) {
      

      它不会在 Firefox 中引发错误,因为 Firefox 实现了 Firebug API,Chrome 和 Safari 也是如此。但是,默认情况下,Internet Explorer 不会,因此,值得在此处进行适当的功能检查,因为它会在未实现此 API 的浏览器中引发 ReferenceError。

      【讨论】:

      • 谢谢,我知道这就是为什么页面在 IE 以及除 Firefox 之外的其他浏览器上无法正常运行的原因。 htmlunit 有什么方法可以让我只更改那部分代码吗?
      • 这里的修复只是修复你的功能测试方式(这是一个实际错误,而不仅仅是测试平台中的一个整体);不确定您是否可以重写测试平台以识别控制台对象
      • 呃,"whole".replace("w","").
      • 实际上我没有使用 htmlunit 进行测试,而是用于解析网站,这是我无法更改任何人的代码的原因,并且在使用 htmlunit 解析之前对更改 JS 更不感兴趣。如果有办法,请让我知道或至少上述代码 if (Console && console.log) 也应该使用 BrowserVersion.FIREFOX_3 或更高版本在 htmlunit 中工作,因为它可以在具有相同版本的本地浏览器中工作而无需使用 firebug
      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多