2011-09-29 55 views
1

使用jQuery我試圖操縱WordPress的內容編輯器,它使用TinyMCE的一個iframe內。我似乎無法得到下面的代碼工作打算:訪問的WordPress的TinyMCE的iFrame的

jQuery(document).ready(function($) { 
$('#content_ifr').ready(function() { 
    $('#content_ifr').contents().find('body').css('background-color', '#f33'); 
}); 

不管我是否使用「就緒()」或「.load()」,該事件的TinyMCE的編輯器之前將火( iframe的主體)完全加載完成。

但是,下面的代碼將工作,如果我等待的iframe手動單擊標題文本之前加載火單擊事件:

jQuery(document).ready(function($) { 
$('#title').click(function() { 
    $('#content_ifr').contents().find('body').css('background-color', '#f33'); 
}); 

我已經窮盡搜索了jQuery和iFrame中的主題,而且這看起來是根據情況而定。一些代碼適用於某些人,而不適用於其他人。

有誰知道的一種方式來獲得第一代碼片段TinyMCE的IFRAME體後,火被完全完成載入?因爲它只是WordPress內容編輯器,所以iframe內容位於同一個域中。

我真正想要做的是一類通過.addClass()

jQuery(document).ready(function($) { 
$('#content_ifr').ready(function() { 
    $('#content_ifr').contents().find('body').addClass('ui-droppable'); 
}); 

所以添加到body元素在iframe中,我可以在下面的教程應用拖N」滴代碼:

http://skfox.com/2008/11/26/jquery-example-inserting-text-with-drag-n-drop/

+0

也許改變TinyMCE代碼本身? – HerrSerker

+0

@HerrSerker這種情況已經開始看起來像是唯一的可能性:創建一個在TinyMCE插件觸發通過一個全局變量的事件或信號,但是這將是頗爲曲折。嗯 – Robert

回答

1

更多挖後,出現的問題是在WordPress的TinyMCE中與交互的方式。通過以下螺紋kovshenin後闡明這一些輕: change textarea value doesn't work 爲了操縱WordPress的內容,我需要隱藏的文本區域,而不是iframe中的內容本身的工作。

+0

請你分享代碼snipet或你是如何解決這個問題..我在這裏面臨同樣的問題:( – numediaweb

+0

更新 好吧,代碼是: jQuery(「#content」)。text(「Your文本在這裏「); tinyMCE.activeEditor.execCommand('mceSetContent',false,jQuery(」#content「).text()); – numediaweb

1

看一看你的TinyMCE的配置。您所需要的只是使用"setup"-setting並在那裏設置onInit-Handler。這裏有一個例子:

tinyMCE.init({ 
    ... 
    setup : function(ed) { 
     ed.onInit.add(function(ed, evt) { 
      window.console && window.console.log('Tinymce Iframe loaded!'); 
      // do whatever you like here 
     }); 
    } 
}); 
5

可以使用tiny_mce_before_init鉤tinymce.init前的一類補充人體

function my_tiny_mce_before_init($init_array) { 
    $init_array['body_class'] = 'some-class some-other-class'; 
    return $init_array; 
} 
add_filter('tiny_mce_before_init', 'my_tiny_mce_before_init'); 
+0

+1 Works well .. – Ben

1

我用這個功能來訪問或樣式IFRAME(內TinyMCE的) Wordpess: 將此腳本添加到wordpress儀表板腳本中,並在TINYMCE iframe加載時進行檢測,然後對其執行操作。

add_action('admin_head', 'my_tinymce_styler',99,99); 
function my_tinymce_styler() 
    { 
     ?> 
     <script> 
     var theFrame; 
     window.onload = function() 
     { 
      theFrame = document.getElementsByTagName("iframe")[0]; 
      if (!theFrame) {window.setTimeout(function(){theFrame = document.getElementsByTagName("iframe")[0]}, 1000); } 
      else 
      { 
        var theFrameDocument = theFrame.contentDocument || theFrame.contentWindow.document; 
        var frmbody = theFrameDocument.body; 
        frmbody.innerHTML += '<?php echo json_encode(' 
         <style> 
          .parentt{ 
          border:5px solid red !important; 
          } 
         </style>');?>'; 
      } 
     }; 
     </script> 
      <?php 
    }