我已经在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]”并且我不确定它的含义,以及它是否与上述问题相关。
这是一个非常漫长的请求帮助,所以感谢阅读,谢谢你的帮助!!
答案 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();
}