2013-03-30 43 views
0

後,我工作的一個所見即所得的編輯器,並經歷與圖像的execCommand使用處理一個問題,下面是我的網頁藥結構的一個簡單的例子:圖像的execCommand阿賈克斯

<div id="buttons_panel"><input id="img_submit" type="button"/></div> 

<div id="img_handle" style="display:none;"> 
<div id="ajax_upload"></div> /* AJAX IMG UPLOAD FROM */ 
<div id="images"></div> /* DIV FOR ALL UPLOADED IMAGES DISPLAY */ 
</div> 

<iframe id="text_content"></iframe> 

簡化的JavaScript我使用,基本上呈現隱藏的div上傳與阿賈克斯的圖像,並顯示所有上傳的圖片:

<script> 
$("#img_submit").click(function(){ 
$("#img_handle").show(); 

/* HANDLE IMG UPLOAD WITH AJAX AND RELOAD ALL IMAGES INTO #images DIV */ 
}); 
</script> 

現在,這一切都工作得很好 - 只要新的圖像上載與阿賈克斯我把它添加到圖像div:

function loadImgs(){ 
var loadImages="PATH/TO/URL"; 
$.post(loadImages, {request:"loadImages"}, function(response){ 
$("#images").append(response); 
insert_img(); 
}); 
} 

然後,點擊任我執行下列函數的結果:

function insert_img(){$(".img_insert").click(function(){ 
var frame = document.getElementById('text_content'); frame.document.execCommand('InsertImage',false,"../PATH/TO/IMG"); 
});} 

現在,這裏是其中的execCommand拒絕在Firebug工作,我得到:"getElementById("text_content").document UNDEFIEND"

每隔execCommand函數我運行在該頁面上(例如:斜體粗體,字體顏色等),但在這裏沒有,有人可以幫我找出解決方案嗎?

回答

2

獲取元素中的document對象的標準方法是通過其contentDocument屬性而不是document。這在一些較舊的瀏覽器中不受支持,但在那些您可以使用contentWindow.document來代替。

因此,下面將在所有的瀏覽器,除了那些不支持contentDocumentcontentWindow,這在實踐中各地今天都沒有:

function getIframeDocument(iframeEl) { 
    return iframeEl.contentDocument || iframeEl.contentWindow.document; 
} 

function insert_img(){ 
    $(".img_insert").click(function() { 
     var frame = document.getElementById('text_content'); 
     getIframeDocument(frame).execCommand('InsertImage',false,"../PATH/TO/IMG"); 
    }); 
}