getelementbyid.contentdocument خطأ في IE
-
16-09-2019 - |
سؤال
<html>
<script type="text/javascript">
function func() {
alert(document.getElementById('iView').contentDocument);
}
</script>
<body>
<iframe id="iView" style="width:200px;height:200px;"></iframe>
<a href="#" onclick="func();">click</a>
</body>
</html>
بعد النقر، إرجاع Firefox [كائن HTMLDocument]. إرجاع Internet Explorer غير محدد.
كيف يمكنني تحديد عنصر Iview مع Internet Explorer؟ شكرا.
المحلول
من هذه الصفحة:
يدعم Mozilla مستوى W3C من الوصول إلى كائن مستند IFRAME من خلال IFRameELM.ContentDocument، في حين يتطلب منك Internet Explorer الوصول إليه من خلال المستند .Frame ["الاسم"] ثم الوصول إلى المستند الناتج.
لذلك تحتاج إلى الكشف عن المتصفح وعلى أي فعل شيء مثل هذا بدلا من ذلك:
document.frames['iView'].document;
نصائح أخرى
المتصفح عبر المكافئ contentDocument
(بما في ذلك فايرفوكس نفسه، حيث contentDocument
هل العمل هو contentWindow.document
.
لذا حاول:
alert(document.getElementById('iView').contentWindow.document);
contentWindow
يحصل لك مرجع إلى iframe window
كائن، وبالطبع .document
هو مجرد كائن مستند DOM ل IFRAME.
يبدو أنك تريد الحصول على محتويات IFRAME الصحيح؟
IE7 و FF2:
var iframe = document.getElementById('iView');
alert(iframe.contentWindow.document.body.innerHTML);
استخدام ميزة الكشف، كما contentDocument
مدعوم في IE 8:
var iframe = document.getElementById("iView");
var iframeDocument = null;
if (iframe.contentDocument) {
iframeDocument = iframe.contentDocument;
} else if (iframe.contentWindow) {
// for IE 5.5, 6 and 7:
iframeDocument = iframe.contentWindow.document;
}
if (!!iframeDocument) {
// do things with the iframe's document object
} else {
// this browser doesn't seem to support the iframe document object
}
contentWindow.document.body.innerHTML
يعمل بالنسبة لي في Internet Explorer و Firefox، في حين
contentDocument.body.innerHTML
سوف تعمل فقط في فايرفوكس.
افعل شيئا مثل هذا:
var myFrame = document.getElementById('iView');
var frameDoc = myFrame.contentDocument || myFrame.contentWindow;
if (frameDoc.document){
frameDoc = frameDoc.document;
}
alert(frameDoc);
يرى هذه الصفحة لمزيد من التفاصيل