Всегда получать нулевое значение из iterateNext() для document.evaluate
При использовании приведенного ниже кода в скрипте всегда получайте значение N
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
Но используйте эту команду в консоли Chrome, чтобы получить правильное значение, почему это происходит?
Вот полный код файла js и файла html
test.js
function testClick(xpath){
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
// var a = e.iterateNext();
if(document.createEvent){
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, false);
e.dispatchEvent(event);
}
else if(document.createEventObject){
e.fireEvent('onclick');
}
}
var xpath = "(//a[@href='./detail.html'])[1]";
setTimeout(testClick(xpath), 3000);
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript" src="../js/test.js"></script>
</head>
<body>
<ul>
<li class="carmen-li"><a href="./detail.html">1</a></li>
<li><a href="./detail.html">2</a></li>
<li><a href="./detail.html">3</a></li>
</ul>
</body>
</html>
1 ответ
Решение
Проблема решена.
Этот, код ниже, работает, кажется, не может вызвать метод с параметром в window.onload напрямую.
Когда вызывается метод с параметром в window.onload, он выполняет этот метод до window.onload, поэтому элемент не завершил загрузку во время выполнения метода, поэтому он возвратит ноль.
function testClickWithParam(xpath){
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
if(document.createEvent){
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, false);
e.dispatchEvent(event);
}
else if(document.createEventObject){
e.fireEvent('onclick');
}
}
function testClickLink(){
var xpath = "(//a[@href='./detail.html'])[1]";
console.log(window.location.href);
testClickWithParam(xpath);
}
window.onload = testClickLink;