Ошибка Javascript 80004005 в моем приложении HTA
function getWindowsUserName()
{
var WinNetwork = new ActiveXObject("WScript.Network");
var urlToSite = createCustomURL(WinNetwork.UserName);
document.getElementById("psyncLink").src = urlToSite;
if(requestingPassword())
{
alert("password button screen");
} else {
alert("direct password required");
}
}
function requestingPassword()
{ // <-- This is the line that is getting the error
// Unspecified error
// Code: 80004005
// Microsoft JScript Runtime error
var btn = window.frames[1].document.getElementsByName("SUBMIT-password.pss");
if (btn.length == 0) {
return false;
} else {
return true;
}
}
Я хотел, чтобы requestPassword был методом bool, но потом я узнал, что Javascript не поддерживает такие имена методов, как
public bool nameofmethod()
Я думаю, что синтаксис правильный. Любая помощь будет оценена!
1 ответ
Решение
requestingPassword()
вызывается сразу после установки URL фрейма. Весьма вероятно, что страница не закончила загрузку, когда frames[1].document.....
метод был вызван. В таком случае, frames[1].document
является null
, который вызывает ошибку, которая будет выброшена.
Чтобы решить эту проблему, просто позвоните requestingPassword
функция в onload
событие.
var frame = document.getElementById("psyncLink");
frame.onload = function() {
frame.onload = null;
if (requestingPassword()) {
alert("password button screen");
} else {
alert("direct password required");
}
};
frame.src = urlToSite;
- Примечание 1: вместо ссылки на кадр
window.frames[1]
(который не легко поддерживать), использоватьframe.contentWindow
(что поддерживается очень хорошо, и не зависит от знания положения кадра) - Примечание 2: Настройка
onload
как свойство не будет связывать событие в IE6-. Если вам нужно поддерживать IE6, используйте.attachEvent("onload", func..);
,