2012-06-14 6 views
0
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; 
    } 
} 

Я хотел requestingPassword быть метод BOOL, но потом я понял, что Javascript Безразлично, имена методов т поддержки какJavascript ошибка 80004005 в моей HTA Применение

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..);.
+0

Есть ли другой способ сделать это без рамки. Загрузка –

+0

@CocoaDev Нет, потому что вы ** должны ** ждать загрузки фрейма. Альтернативное решение должно быть синхронным, что означает, что что-то должно блокировать выполнение вашего кода. Это невозможно, и, конечно, плохой вариант. PS. Вы, должно быть, столкнулись с огромной проблемой с моим ответом, поскольку вы не приняли, не уговорили и отказали в этом. Можете ли вы объяснить, что с ним не так? –

+0

Проблема в том, что код всегда выполняется. Я поместил код frame.onload в функцию, и мне нужно, чтобы второй кадр завершил обработку до того, как сайт загрузился с помощью frame.onload –