欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

手把手教你 CKEDITOR 4 實現(xiàn)Dialog 內(nèi)嵌 IFrame操作詳解

 更新時間:2019年06月18日 11:38:39   作者:iMyWhale  
這篇文章主要介紹了手把手教你 CKEDITOR 4 實現(xiàn)Dialog 內(nèi)嵌 IFrame操作,結(jié)合實例形式分析了CKEDitor4 Dialog內(nèi)嵌IFrame具體操作步驟與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了CKEDITOR 4 實現(xiàn)Dialog 內(nèi)嵌 IFrame操作。分享給大家供大家參考,具體如下:

在上一篇博文《CKEDITOR 4 擴(kuò)展插件制作》中,姜哥跟大家探討了在ckeditor中添加dialog,已經(jīng)添加dialog的一些控件,最終將控件中的值插入到ckeditor編輯器中的過程。但是實際上,我們更多的應(yīng)用,還是會在dialog中,添加iframe組件,直接引用外部網(wǎng)頁,以實現(xiàn)更為復(fù)雜的功能。今天姜哥就和大家一起分享一下,這個開發(fā)過程。

繼續(xù)我們上一個工程中的例子,我們是在contents中添加了elements,就像下面這樣:

      contents:           //每一個contents在對話框中都是一個tab頁
      [
        {
          id: 'user',      //contents的id
          label: 'You name',
          title: 'You name',
          elements:       //定義contents中的內(nèi)容,我們這里放一個文本框,id是name
          [
            {
              id: 'name',
              type: 'text',
              style: 'width: 50%;',
              label: 'You name',
            }
          ]
        }
      ],

如果我們把elements中間的內(nèi)容,換成iframe,會是什么樣呢?讓我們來看一看:

      contents:           //每一個contents在對話框中都是一個tab頁
      [
        {
          id: 'user',      //contents的id
          label: 'You name',
          title: 'You name',
          elements:
          [
            {
              type: "html",
              html: "<iframe id='myiframe' width='100%' height='100%' src='" + "http://www.163.com" + "'></iframe>",
              style: "width:800px;height:580px;padding:0;"
            }
          ]
        }
      ],

在這里,我們描述了我們的elements的類型是html,接著我們插入了一段html代碼,也就是我們的iframe,將網(wǎng)易鏈接了進(jìn)來,最后用style標(biāo)簽定義了對話框的大小。保存之后,打開看看效果:

這里寫圖片描述

果然,我大“黃易”的首頁被載入進(jìn)來了,看來這個路子可行!那接下來,我們可以試著載入自己的頁面了。在ckeditor_sample.html文件旁邊,再新建一個文件,叫做myiframe.html,類似這樣:

這里寫圖片描述

打開這個文件進(jìn)行編輯,填入以下代碼,我們構(gòu)建一個帶有輸入框和復(fù)選框的頁面:

<html>
  <head></head>
  <body>
    <div>
      姓名: <input type="text" id="username" name="username" value="" /> <br/>
      <input type="checkbox" name="yourbook" value="C++">《C++ 從入門到放棄》</input>
      <input type="checkbox" name="yourbook" value="headfirst">《HeadFirst 設(shè)計模式》</input>
      <br />
      <input type="checkbox" name="yourbook" value="Java">《Thinking in Java》</input>
      <input type="checkbox" name="yourbook" value="django">《姜哥的Django匠人生活》</input>
    </div>
  </body>
</html>

然后把myplug.js中elements段的內(nèi)容改成下面這樣,將iframe的src指向我們自己的創(chuàng)建的頁面:

      contents:           //每一個contents在對話框中都是一個tab頁
      [
        {
          id: 'user',      //contents的id
          label: 'You name',
          title: 'You name',
          elements:
          [
            {
              type: "html",
              html: "<iframe id='myiframe' width='100%' height='100%' src='" + "./myiframe.html" + "'></iframe>",
              style: "width:800px;height:580px;padding:0;"
            }
          ]
        }
      ],

保存后打開看效果:

這里寫圖片描述

太棒了!頁面出來了,那么,我們怎么獲取獲取頁面上的輸入值和復(fù)選框的值呢?
還記得上一節(jié),我們打的那些代碼中,那些onLoad,onShow之類的函數(shù)嗎?其實看名字,都可以知道,這些函數(shù)被觸發(fā)的時刻,當(dāng)我們點擊“確定”按鈕的時候,會觸發(fā)onOk事件,同時自動調(diào)用onOk()函數(shù),那我們就在onOk()里寫點兒代碼吧。

      onOk: function () {
        var html = "";
        var your_name = document.getElementById('myiframe').contentDocument.getElementById('username');
        //使用JS最基礎(chǔ)的getElementById找到我們的iframe控件,然后再獲取id為username的控件
        html = html + "<h2>" + your_name.value + ": </h2>";
        var selected_books = document.getElementById('myiframe').contentDocument.getElementsByName('yourbook');
        //使用JS最基礎(chǔ)的getElementById找到我們的iframe控件,然后再獲取所有name為yourBook的控件
        var books = "";
        for(var i=0; i< selected_books.length; i++){
          //遍歷我們的selected數(shù)組
          if (selected_books[i].checked){
            books = books + "<p> " + selected_books[i].value + "</p>";
          }
        }
        html = html + books;
        editor.insertHtml(html);
        this.commitContent();
      },

我們用了最基礎(chǔ)的js語法,從dom對象中獲取我們想要的控件和控件中的值,學(xué)過js語法的同學(xué)應(yīng)該一眼就看的出來,這個真的很簡單,讓我們來運行一下看看吧:

這里寫圖片描述

Oooooops!太糟糕了,居然又報錯了,F(xiàn)12打開的調(diào)試窗口中,可以看到我們這個的這個錯誤叫做:

Blocked a frame with origin "null" from accessing a cross-origin frame

錯誤的意思是:未捕獲的安全錯誤:阻止了一個域為null的frame頁面訪問另一個域為null的頁面。

姜哥給他翻譯成人話:其實是瀏覽器為了避免一種叫做“跨域攻擊”的黑客攻擊手段,阻止了兩個不同域名之間的dom操作。由于我們的頁面是本地打開的,瀏覽器中的地址欄是類似下面這種的本地地址,因此無法訪問iframe頁面中的值:file:///E:/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/ckeditor_4.8.0_full/ckeditor_sample.html

怎么辦呢?其實一般小伙兒伴開發(fā)這個頁面,都是運行在一個工程里,或者一個項目里,本來就是運行在類似http://localhost/xxx這種網(wǎng)絡(luò)地址下的,不會有問題,但是我們現(xiàn)在是想調(diào)試下啊,怎么辦呢。。。

如果只是想調(diào)試學(xué)習(xí)一下,其實特別簡單,那就是——換一個瀏覽器!比如IE瀏覽器,就妥妥啦!

這里寫圖片描述

注意:這里不是說這段代碼在Chrome下無法運行,只是瀏覽器特性不同,chrome不允許這種不在同一個域名下的內(nèi)嵌頁面通過dom接口來訪問,安全性比較高。換句話說就是,如果我們這段代碼是發(fā)布在一個網(wǎng)站上,比如你放在nginx里,瀏覽器通過http://localhost/ckeditor/ckeditor_sample.html這種方式去打開我們的頁面,就沒有問題了!

這里寫圖片描述

相當(dāng)成功,對吧?讓我再次點擊我們的插件,發(fā)現(xiàn)了什么?對了!What the fuck!上次填入的內(nèi)容居然還在里面!

這里寫圖片描述

腫么辦?還記得我們可以使用的函數(shù)嗎?對!我們可以用onHide()函數(shù),在對話框關(guān)閉時,刷新一下myiframe.html,以保證下一次打開時,是一個全新的頁面:

      onHide: function () {
        document.getElementById('myiframe').contentDocument.location.reload();
      },

再次保存之后,嘗試一下,完全正常了。

今天我們學(xué)習(xí)了ckeditor自定義插件的高級用法,涉及到了從內(nèi)嵌iframe取值的相關(guān)操作,也解釋了幾個常見的問題,希望對大家有所幫助。關(guān)于ckeditor的用法,暫時先探討到這里,下次有新的內(nèi)容時,會再次續(xù)更。

完整實例代碼點擊此處本站下載

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript操作XML文件技巧總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • JavaScript初學(xué)者容易犯的幾個錯誤

    JavaScript初學(xué)者容易犯的幾個錯誤

    JavaScript 是對初學(xué)者比較友好的一門編程語言,基本上花個半小時看下語法就能寫出能運行的代碼。JavaScript 是動態(tài)腳本語言,對數(shù)據(jù)類型沒有太多的限制,寫起來非常靈活。但正因為如此,初學(xué)者如果不深入了解語言本身,往往會犯一些錯誤,從而導(dǎo)致一些很難發(fā)現(xiàn)的 bug。
    2021-05-05
  • javascript批量修改文件編碼格式的方法

    javascript批量修改文件編碼格式的方法

    這篇文章主要介紹了javascript批量修改文件編碼格式的方法,分析了使用javascript第三方包批量修改文件編碼的技巧,需要的朋友可以參考下
    2015-01-01
  • 微信小程序?qū)崿F(xiàn)簡單聊天室

    微信小程序?qū)崿F(xiàn)簡單聊天室

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡單聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 關(guān)于JS通過google翻譯插件實現(xiàn)多語言版本

    關(guān)于JS通過google翻譯插件實現(xiàn)多語言版本

    這篇文章主要介紹了JS通過google翻譯插件實現(xiàn)多語言版本,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 最短的javascript:地址欄載入腳本代碼

    最短的javascript:地址欄載入腳本代碼

    相信大家都在地址欄里用javascript:的形式執(zhí)行過腳本。這種方法簡單實用,測試比較短的腳本時經(jīng)常用到
    2011-10-10
  • js鼠標(biāo)按鍵事件和鍵盤按鍵事件用法實例匯總

    js鼠標(biāo)按鍵事件和鍵盤按鍵事件用法實例匯總

    這篇文章主要介紹了js鼠標(biāo)按鍵事件和鍵盤按鍵事件用法,結(jié)合實例形式總結(jié)分析了JavaScript針對鼠標(biāo)與鍵盤事件的常用操作技巧,需要的朋友可以參考下
    2016-10-10
  • 詳解webpack3編譯兼容IE8的正確姿勢

    詳解webpack3編譯兼容IE8的正確姿勢

    這篇文章主要介紹了詳解webpack3編譯兼容IE8的正確姿勢,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 微信開發(fā) 消息推送實現(xiàn)代碼

    微信開發(fā) 消息推送實現(xiàn)代碼

    這篇文章主要介紹了微信開發(fā) 消息推送實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 關(guān)于微信小程序登錄的那些事

    關(guān)于微信小程序登錄的那些事

    這篇文章主要給大家介紹了關(guān)于微信小程序登錄的那些事,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • js 計數(shù)排序的實現(xiàn)示例(升級版)

    js 計數(shù)排序的實現(xiàn)示例(升級版)

    這篇文章主要介紹了js 計數(shù)排序的實現(xiàn)示例(升級版),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評論