<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
สิ่งที่ฉันต้องการได้คือ:
test<br/>
<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
สิ่งที่ฉันต้องการได้คือ:
test<br/>
คำตอบ:
คำถามที่แน่นอนคือวิธีการทำกับ JavaScript บริสุทธิ์ไม่ได้อยู่กับ jQuery
แต่ฉันมักจะใช้วิธีแก้ปัญหาที่สามารถพบได้ในซอร์สโค้ดของ jQuery เป็นเพียงหนึ่งบรรทัดของ JavaScript ดั้งเดิม
สำหรับฉันมันเป็นสิ่งที่ดีที่สุดและง่ายอ่านได้และแม้กระทั่งAFAIKทางที่สั้นที่สุดที่จะได้รับเนื้อหาใน iframe
ก่อนได้รับ iframe ของคุณ
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
จากนั้นใช้โซลูชันของ jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
มันทำงานได้แม้ใน Internet Explorer ซึ่งทำสิ่งนี้ระหว่าง
contentWindow
คุณสมบัติของiframe
วัตถุ เบราว์เซอร์อื่น ๆ ส่วนใหญ่ใช้contentDocument
คุณสมบัติและนั่นคือเหตุผลที่เราพิสูจน์คุณสมบัตินี้ก่อนในเงื่อนไขนี้หรือcontentWindow.document
ถ้ามันไม่ได้ตั้งค่าลอง
เลือกองค์ประกอบใน iframe
จากนั้นคุณสามารถใช้getElementById()
หรือแม้กระทั่งquerySelectorAll()
เลือกองค์ประกอบ DOM จากiframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
เรียกใช้ฟังก์ชันใน iframe
รับเพียงwindow
องค์ประกอบจากiframe
การเรียกฟังก์ชั่นทั่วโลกตัวแปรหรือห้องสมุดทั้งหมด (เช่นjQuery
):
var iframeWindow = iframe.contentWindow;
// you can even call jQuery or other frameworks
// if it is loaded inside the iframe
iframeContent = iframeWindow.jQuery('#frameBody');
// or
iframeContent = iframeWindow.$('#frameBody');
// or even use any other global variable
iframeWindow.myVar = window.myVar;
// or call a global function
var myVar = iframeWindow.myFunction(param1 /*, ... */);
บันทึก
ทั้งหมดนี้เป็นไปได้หากคุณปฏิบัติตามนโยบายแหล่งกำเนิดเดียวกัน
document.querySelector('#id_description_iframe').onload = function() {...
หวังว่าจะช่วยให้ใครบางคน
ใช้ JQuery ลองทำสิ่งนี้:
$("#id_description_iframe").contents().find("body").html()
มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน:
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
ไม่ทำงาน อย่างไรก็ตาม.getElementsByTagName('body')[0]
ไม่
AFAIK, Iframe ไม่สามารถใช้ได้ คุณต้องชี้แอตทริบิวต์ src ไปยังหน้าอื่น
ต่อไปนี้เป็นวิธีรับเนื้อหาโดยใช้จาวาสคริปต์แบบเก่า ใช้ได้กับทั้ง IE และ Firefox
function getFrameContents(){
var iFrame = document.getElementById('id_description_iframe');
var iFrameBody;
if ( iFrame.contentDocument )
{ // FF
iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
}
else if ( iFrame.contentWindow )
{ // IE
iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
}
alert(iFrameBody.innerHTML);
}
ใช้content
ใน iframe ด้วย JS:
document.getElementById('id_iframe').contentWindow.document.write('content');
ฉันคิดว่าการวางข้อความไว้ระหว่างแท็กนั้นสงวนไว้สำหรับเบราว์เซอร์ที่ไม่สามารถจัดการ iframe เช่น ..
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
คุณใช้แอตทริบิวต์ 'src' เพื่อตั้งค่าที่มาของ iframes html ...
หวังว่าจะช่วย:)
รหัสต่อไปนี้เป็นไปตามข้ามเบราว์เซอร์ มันทำงานได้ใน IE7, IE8, Fx 3, Safari และ Chrome ดังนั้นไม่จำเป็นต้องจัดการกับปัญหาข้ามเบราว์เซอร์ ไม่ได้ทดสอบใน IE6
<iframe id="iframeId" name="iframeId">...</iframe>
<script type="text/javascript">
var iframeDoc;
if (window.frames && window.frames.iframeId &&
(iframeDoc = window.frames.iframeId.document)) {
var iframeBody = iframeDoc.body;
var ifromContent = iframeBody.innerHTML;
}
</script>
window.frames.iframeId.document
ไม่ได้กำหนดสำหรับฉัน (Ubuntu 13.04, Chrome)
Chalkey ถูกต้องคุณต้องใช้แอตทริบิวต์ src เพื่อระบุหน้าที่จะอยู่ใน iframe ให้คุณทำสิ่งนี้และเอกสารใน iframe อยู่ในโดเมนเดียวกับเอกสารหลักคุณสามารถใช้สิ่งนี้:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
เห็นได้ชัดว่าคุณสามารถทำสิ่งที่มีประโยชน์กับเนื้อหาแทนการแจ้งเตือน
เพื่อรับเนื้อหาร่างกายจาก javascript ฉันได้ลองใช้รหัสต่อไปนี้:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
โดยที่ "id_description_iframe" เป็นรหัส iframe ของคุณ รหัสนี้ใช้งานได้ดีสำหรับฉัน