JavaScript getElementById (...) является нулевым или не является объектом IE - PullRequest
2 голосов
/ 30 июня 2010

Это должно быть что-то очень простое для экспертов JavaScript. В следующем коде я пытаюсь открыть iframe на всю высоту окна браузера.

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
         <script language="javascript" type="text/javascript">
    function resizeIframe() {
    var height = document.documentElement.clientHeight;
    height -= document.getElementById('documentFrame2').offsetTop;
    height -= 20;
    document.getElementById('documentFrame2').style.height = height +"px";
 };
document.getElementById('documentFrame2').onload = resizeIframe;
window.onresize = resizeIframe;
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <iframe src="standard-tube-map.pdf" id="documentFrame2" width="100%" onload="resizeIframe();" ></iframe> 
    </div>
    </form>
</body>
</html>

Работает в Mozilla, но в IE (тестируется только в IE8) выдает ошибку: «document.getElementById (...) имеет значение null или не является объектом». Кто-нибудь может подсказать, что мне следует изменить, чтобы он работал в разных браузерах?

Большое спасибо, Али

Ответы [ 4 ]

2 голосов
/ 30 июня 2010

Попробуйте обернуть

document.getElementById('documentFrame2').onload = resizeIframe;

Внутри:

window.onload = function(){

    document.getElementById('documentFrame2').onload = resizeIframe;
    window.onresize = resizeIframe;
    resizeIframe();
};

iframe не существует в DOM до тех пор, пока страница / Dom не загрузится.* ОБНОВЛЕНИЕ :

Не видел часть кода, который вы опубликовали.

Вы можете держать onload = "resizeIframe" внутри самого элемента и иметь JavaScript в голове как:

function resizeIframe() {
    var height = document.documentElement.clientHeight;
    height -= document.getElementById('documentFrame2').offsetTop;
    height -= 20;
    document.getElementById('documentFrame2').style.height = height +"px";
 }


 window.onresize = resizeIframe;

Таким образом, вам не потребуется запускать JavaScript после элемента.

1 голос
/ 26 октября 2011
  1. alert(document.getElementById('abcId').value);
    
  2. alert(document.formName.elements['abcName'].value);
    

У меня возникла та же проблема, что и во втором, она работала.

0 голосов
/ 30 июня 2010

Если вы использовали onload"resizeIframe" в теге iframe, вам больше не нужно document.getElementById('documentFrame2').onload = resizeIframe; больше

Я предпочитаю использовать window.onresize = resizeIframe;:

window.onload = function() {
  window.onresize = resizeIframe;
};

Иногда окнобудет изменен до того, как iframe будет готов к работе, и это приведет к ошибкам.

=======================

отредактировано:

window.onload = function() {
  resizeIframe();
  window.onresize = resizeIframe;
};
0 голосов
/ 30 июня 2010

вы делаете

document.getElementById('documentFrame2').onload = resizeIframe;

до того, как документ будет готов, чтобы можно было найти iframe. вызовите это в функции onload или document-ready или в отдельном блоке javascript после iframe.

...