2015-04-23 2 views
0

Я знаю, когда мы используем HTMLUnit, они хотят, чтобы именно идеальный javascript работал на своем веб-клиенте. Но как мы обрабатываем Когда JavaScript-код, какКак htmlUnit обрабатывать unperfected javascript?

document.createNodeIterator(root,NodeFilter.SHOW_ALL,null,false); 

Он жалуется на «Не удается найти функцию createNodeIterator в объект», который на document.createNodeIterator отлично работает в браузере.

Вот трассировки стека:

com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot find function createNodeIterator in object [object HTMLDocument]. (https://cdn01.icims.com/platform_14.2.150421.78248/erac.icims.com/icims2/servlet/icims2?module=AppInert&action=bundleJavascript&scripts=%2Fportal%2Fjquery-1.8.0.js%2C%2Flib%2Fdomreplacement%2FdomReplacement.js%2C%2Fcommon%2Ficims.js%2C%2Fportal%2Futils.js%2C%2Fportal%2FshowMoreTextAbstract.js%2C%2Fportal%2Ffield.js%2C%2Fportal%2Flogin.js%2C%2Ffield%2Fvalidate.js%2C%2Fcommon%2FicimsTrickle.js%2C%2Fcommon%2FicimsDropdown.js%2C&a=1429647520000#21) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:705) [htmlunit-2.15.jar:2.15] 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620) [htmlunit-core-js-2.15.jar:na] 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513) [htmlunit-core-js-2.15.jar:na] 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:637) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:612) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1001) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners(EventListenersContainer.java:179) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:239) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:824) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:748) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:920) [htmlunit-2.15.jar:2.15] 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620) [htmlunit-core-js-2.15.jar:na] 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:513) [htmlunit-core-js-2.15.jar:na] 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:925) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1298) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:290) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:475) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:342) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement.loadInnerPageIfPossible(BaseFrameElement.java:184) [htmlunit-2.15.jar:2.15] 
    at com.gargoylesoftware.htmlunit.html.BaseFrameElement.loadInnerPage(BaseFrameElement.java:122) [htmlunit-2.15.jar:2.15] 
+0

Там нет ничего плохого в том, что сценарий - createNodeIterator это просто новая функция JS. Я предполагаю, что javascript движок htmlunit не поддерживает его (или, может быть, это старая версия) – Katana314

+0

@ katana314 Я использую htmlunit 2.15, который является второй новейшей версией. как вы думаете, я должен обновить его до 2.16? –

ответ

1

NodeIterator просто реализован, пожалуйста, дайте последний снимок попробовать.

Тестовые можно найти here

Последний снимок можно найти в мавена или build server (логин в качестве гостя)

+0

@ashour Я не видел метод createNodeIterator в классе NoteIterator. Будет ли этот метод обрабатывать javascript «document.createNodeIterator (root, NodeFilter.SHOW_ALL, null, false);» ? –

+0

@ashour btw, спасибо, что позволил мне это. Просто интересно, будет ли эта версия обрабатывать createNodeIterator каким-то образом. –

+0

Да, он реализован в 2.17-SNAPSHOT, который будет выпущен примерно через 3 месяца. (2.16 был недавно выпущен). –

Смежные вопросы