富文本ZSSRichTextEditor之趟坑集錦


富文本ZSSRichTextEditor是iOS原生與網頁交互的集大成者,各種交互。自然問題也是多多,這篇文文章陸續更新遇到的奇葩問題。

 

1.問題1:從頭條這種文章里頭復制粘貼的文章,里邊有圖片,我們需求並不需要,如何過濾?

干了客戶端,一開始額思路,總想從客戶端的webview里頭找出路,忙活半天,並未發現可以下手的地方,最后只能從網頁這邊想辦法。

#####最后確定如下思路:


找到html中zss_editor_content這個div容器的粘貼動作(onpaste)-- 在這個方法中遍歷html內容(刪除非我們上傳的圖片)

下面就是為html中的zss_editor_content容器 添加粘貼事件,由於不延時的話,執行zss_editor.deleteOutAppImg方法,即遍歷圖片內容的時候,粘貼還沒完成,所以延時500ms

<body >
    <!-- ZSSRichTextEditor Editable Content -->
    <!-- 給這個容器添加了一個粘貼事件,延時500毫秒,不然執行事件的時候,web還沒有內容,沒法刪除 -->
    <div id="zss_editor_content" onpaste="setTimeout('zss_editor.deleteOutAppImg()', 500);" class="zs_editor_content" contenteditable="true" placeholder="請輸入正文"></div>

</body>

 



問題來了,如何知道html的圖片不是我們上傳的圖片??

  • 從圖片本身並無好的方法,只能是正則匹配,不符合我們服務器圖片的刪去,但是這太牽強了,比如某個外來圖片剛好符合,那不是gg了
  • 剛好我們的圖片有刪除功能,自然每個圖片標簽在插入的時候,點擊事件就攜帶了一個我們定義的屬性,所以通過判斷html內容中img是否攜帶這樣的因子,不帶的就不是我們手動插入的,刪除(當然下面也會總結下,刪除圖片的方法)

下面是插入圖片,就是圖片攜帶因子的瞬間

//插入圖片讓換行
zss_editor.insertImage = function(url, alt) {
    zss_editor.restorerange();
    var html = '<img src="'+url+'" alt="'+alt+'" onclick="zss_editor.deleteImg(0,this)"/><div><br/></div>';
    zss_editor.insertHTML(html);
    zss_editor.focusEditor();
    zss_editor.enabledEditingItems();
}


接下來看看刪除的具體方法,使用還是jquery,高端了

 

//使用jquery刪除不是自己上傳的圖片--感謝金哥的鼎力相助
/*自己的圖片有zss_editor.deleteImg(0,this)事件,外頭的圖片沒有*/
zss_editor.deleteOutAppImg = function() {
    $('img').each(function(index, obj){
      if($(this).attr('onclick') != 'zss_editor.deleteImg(0,this)'){
          $(this).remove();
      }
    });
}


到這里這個外邊圖片的問題就解決了

2.問題2:如何刪除編輯器中已經上傳的圖片


嘗試過,網頁直接彈出一個alertview,但是有坑,網頁控制彈出的alertview,他的title是無法自定義的,一直寫個null之類的東西,直接棄用

所以最后只能采用,js調用原生,原生再次調用js,處理這個問題
代碼如下;

zss_editor.deleteImg = function(type,obj) {
    if(type == 0){
        object = obj;
        deleteNowImg();//調用原生方法
    }else {
         $(object).remove();
    }
}

 

//在該方法里定義了如下方法,原生調用js
- (void)webViewDidFinishLoad:(UIWebView *)webView { MJWeakSelf; ctx[@"deleteNowImg"] = ^() {//刪除圖片 dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf deleteImg]; }); }; }
//原生方法,調用alertview
- (void)deleteImg { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"確認刪除圖片?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定",nil]; [alert show]; }
//再次交互,原生調用js,刪除圖片 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex == 1) { NSString *trigger = [NSString stringWithFormat:@"zss_editor.deleteImg(\"%@\", \"%@\");", @"1", @""]; [self.editorView stringByEvaluatingJavaScriptFromString:trigger];//原生通過js調用刪除方法 } }

兩端交互,實現圖片的刪除功能

 

codeBy-Zqk 2018-03-21 08:45:08

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM