JQUERY:在change()/ keyup()上动态加载和更新iframe内容

时间:2010-11-30 21:07:32

标签: html iframe jquery

我已经在drupal中使用自定义CMS大约两三个星期了,我一直遇到同样的问题。我正在尝试加载动态生成的url(通过将目标drupal页面的节点id解压缩到$ resultCut并将其附加到网站的baseurl)。此iframe嵌入在CKEditor的实例旁边,其目的是在修改CKEditor中的字段时更改iframe中的内容。我有以下Jquery:

<script type="text/javascript">     
$(document).ready(function(){          
    baseurl = urlhere;
    url = baseurl+"<?php echo $resultCut ?>"
    $('#EmuFrame').attr('src', url); 
    var HTML = $('#EmuFrame').contents().find('body').html();
    alert ( "LOADING COMPLETE" + HTML );
});
$('#edit-field-mobile-page-header-label-0-value').change(function () { // writes changes to the header text to emulaor
    var curr = $(this).val();
    $('#EmuFrame').contents().find("h1").text(curr);
});
$('#edit-body').keyup(function(e)  { // writes changes to the body text to emulator
    var curr = $(this).val();
currhead = $('#EmuFrame').contents().find("h1").html();
$('#EmuFrame').contents().find('#content').html("<h1>"+currhead+"</h1>"+curr);
});

其中#EmuFrame是iframe的id,而#edit- *标签是我正在监视变化的CKEditor中的字段ID。当用户键入时,keyup()或change()事件应该获取新的html并将其与iframe中的html交换。

截至目前,LOADING COMPLETE警报已触发,但警报中没有html。我注意到,在警报触发后iframe的内容会加载,这使我相信这是事件触发顺序的问题。

此外,我在keyup的回调函数中有一个警告,它返回了用户开始输入时生成的新html [alert(curr)],并且此警报返回html(尽管,它正在从CKEditor中获取) 。但是,iframe不会反映任何更改。如果我追加[alert(currhead)],则根本不会发出任何警报。

值得注意的是,源网址在技术上与父网站不同。但是,我使用了一种解决方法(我很确定它有效,因为我之前已经完成了整个html替换工作,然后它以某种方式破坏了)。此外,Firebug和Chrome的控制台都不报告任何XMLHttpRequest错误。此外,我不断收到此错误:“未捕获的语法错误,无法识别的表达式:[@disabled]”并且我不确定它的含义,以及它是否与上述问题相关。

这是一个非常漫长的请求帮助,所以感谢阅读,谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

您关于跨域iframe src的说明令人担忧 - 您无法使用javascript访问其内容。尽管如此:

您可以快速连续使用这两行:

$('#EmuFrame').attr('src', url); 
var HTML = $('#EmuFrame').contents().find('body').html();

请先尝试等待iframe加载:

$('#EmuFrame').load(function() {
    var HTML = $('#EmuFrame').contents().find('body').html();
}