富文本ZSSRichTextEditor之趟坑集錦

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

1.問題1:從頭條這種文章里頭復(fù)制粘貼的文章蜗侈,里邊有圖片篷牌,我們需求并不需要睡蟋,如何過濾?

干了客戶端枷颊,一開始額思路戳杀,總想從客戶端的webview里頭找出路,忙活半天夭苗,并未發(fā)現(xiàn)可以下手的地方信卡,最后只能從網(wǎng)頁這邊想辦法。

最后確定如下思路:

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

下面就是為html中的zss_editor_content容器 添加粘貼事件题造,由于不延時的話傍菇,執(zhí)行zss_editor.deleteOutAppImg方法,即遍歷圖片內(nèi)容的時候界赔,粘貼還沒完成丢习,所以延時500ms
<body >
    <!-- ZSSRichTextEditor Editable Content -->
    <!-- 給這個容器添加了一個粘貼事件,延時500毫秒淮悼,不然執(zhí)行事件的時候咐低,web還沒有內(nèi)容,沒法刪除 -->
    <div id="zss_editor_content" onpaste="setTimeout('zss_editor.deleteOutAppImg()', 500);" class="zs_editor_content" contenteditable="true" placeholder="請輸入正文"></div>

</body>

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

  • 從圖片本身并無好的方法羹令,只能是正則匹配鲤屡,不符合我們服務(wù)器圖片的刪去,但是這太牽強了福侈,比如某個外來圖片剛好符合酒来,那不是gg了

  • 剛好我們的圖片有刪除功能,自然每個圖片標(biāo)簽在插入的時候癌刽,點擊事件就攜帶了一個我們定義的屬性役首,所以通過判斷html內(nèi)容中img是否攜帶這樣的因子,不帶的就不是我們手動插入的显拜,刪除(當(dāng)然下面也會總結(jié)下衡奥,刪除圖片的方法)

下面是插入圖片,就是圖片攜帶因子的瞬間
//插入圖片讓換行
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:如何刪除編輯器中已經(jīng)上傳的圖片
嘗試過,網(wǎng)頁直接彈出一個alertview档址,但是有坑盹兢,網(wǎng)頁控制彈出的alertview,他的title是無法自定義的守伸,一直寫個null之類的東西绎秒,直接棄用

所以最后只能采用,js調(diào)用原生尼摹,原生再次調(diào)用js见芹,處理這個問題
代碼如下;


zss_editor.deleteImg = function(type,obj) {
    if(type == 0){
        object = obj;
        deleteNowImg();//調(diào)用原生方法
    }else {
         $(object).remove();
    }
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    self.editorLoaded = YES;

    if (!self.topTitleHTML) {
        self.topTitleHTML = @"";
    }
    
    if (!self.internalHTML) {
        self.internalHTML = @"";
    }
    
    [self updateTitleHTML];
    [self updateHTML];
    
    if(self.placeholder) {
        [self setPlaceholderText];
    }
    
    if (self.customCSS) {
        [self updateCSS];
    }

    if (self.shouldShowKeyboard) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            //[self focusTitleTextEditor];
        });
    }
    
    /*
     
     Callback for when text is changed, solution posted by richardortiz84 https://github.com/nnhubbard/ZSSRichTextEditor/issues/5
     
     */
    JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    ctx[@"contentUpdateCallback"] = ^(JSValue *msg) {

        if (_receiveEditorDidChangeEvents) {

            [self editorDidChangeWithText:[self getText] andHTML:[self getHTML]];

        }

        [self checkForMentionOrHashtagInText:[self getText]];

    };

    [ctx evaluateScript:@"document.getElementById('zss_editor_content').addEventListener('input', contentUpdateCallback, false);"];
    
    ctx[@"zqk"] = ^(JSValue *msg) {
        
        [[NSNotificationCenter defaultCenter] postNotificationName:RichTextTitleFocus object:nil];
        
    };
    
    [ctx evaluateScript:@"document.getElementById('zss_editor_title').addEventListener('focus', zqk, false);"];
    
    ctx[@"qkz"] = ^(JSValue *msg) {
        
        [[NSNotificationCenter defaultCenter] postNotificationName:RichTextContentFocus object:nil];
        
    };
    
    [ctx evaluateScript:@"document.getElementById('zss_editor_content').addEventListener('focus', qkz, false);"];
    
    MJWeakSelf;
    ctx[@"deleteNowImg"] = ^() {//刪除圖片
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf deleteImg];
        });
       
    };
    
}
- (void)deleteImg {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                    message:@"確認(rèn)刪除圖片?"
                                                   delegate:self
                                          cancelButtonTitle:@"取消"
                                          otherButtonTitles:@"確定",nil];
    
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 1) {
        NSString *trigger = [NSString stringWithFormat:@"zss_editor.deleteImg(\"%@\", \"%@\");", @"1", @""];
        [self.editorView stringByEvaluatingJavaScriptFromString:trigger];//原生通過js調(diào)用刪除方法
    }
}

兩端交互,實現(xiàn)圖片的刪除功能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蠢涝,一起剝皮案震驚了整個濱河市玄呛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌和二,老刑警劉巖徘铝,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惯吕,居然都是意外死亡惕它,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門混埠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怠缸,“玉大人,你說我怎么就攤上這事钳宪〗冶保” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵吏颖,是天一觀的道長搔体。 經(jīng)常有香客問我,道長半醉,這世上最難降的妖魔是什么疚俱? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮缩多,結(jié)果婚禮上呆奕,老公的妹妹穿的比我還像新娘。我一直安慰自己衬吆,他們只是感情好梁钾,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逊抡,像睡著了一般姆泻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天拇勃,我揣著相機(jī)與錄音四苇,去河邊找鬼。 笑死方咆,一個胖子當(dāng)著我的面吹牛月腋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峻呛,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罗售,長吁一口氣:“原來是場噩夢啊……” “哼辜窑!你這毒婦竟也來了钩述?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤穆碎,失蹤者是張志新(化名)和其女友劉穎牙勘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體所禀,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡方面,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了色徘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恭金。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖褂策,靈堂內(nèi)的尸體忽然破棺而出横腿,到底是詐尸還是另有隱情,我是刑警寧澤斤寂,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布耿焊,位于F島的核電站,受9級特大地震影響遍搞,放射性物質(zhì)發(fā)生泄漏罗侯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一溪猿、第九天 我趴在偏房一處隱蔽的房頂上張望钩杰。 院中可真熱鬧,春花似錦诊县、人聲如沸讲弄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垂睬。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驹饺,已是汗流浹背钳枕。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赏壹,地道東北人鱼炒。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蝌借,于是被迫代替她去往敵國和親昔瞧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫菩佑、插件自晰、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,094評論 4 62
  • 成年瞧哟,沒有容易的混巧。 不是努力就有結(jié)果。不是相愛 就能成家勤揩。 殘酷是真實的世界主流咧党,多看~人與自然~之類的真實~記錄...
    井底的動物閱讀 204評論 0 0
  • 點一杯熟悉的Cappuccino傍衡,坐在習(xí)慣的角落,穿著一身簡單的深咖色大衣数苫。陽光透過白凈的玻璃洋洋灑灑的落在她勾著...
    一苜閱讀 366評論 1 3
  • 每到假期聪舒,出去散散心,換換心情是最好不過的了虐急。但有的時候箱残,經(jīng)常會發(fā)生沒有小伙伴一起同行的情況,但一個人玩耍實在是沒...
    最美應(yīng)用閱讀 483評論 0 3
  • 今天下班坐公交車回家止吁,車站上碰到了以前的一個同事被辑,車沒來說我們就嘮嗑。一會敬惦,車來了盼理,他先上了車,投了兩塊錢俄删,我說宏怔,...
    伊薩閱讀 180評論 3 5