富文本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();
    }
}
- (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:@"确认删除图片?"
                                                   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调用删除方法
    }
}

两端交互,实现图片的删除功能

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,102评论 4 62
  • 成年,没有容易的。 不是努力就有结果。不是相爱 就能成家。 残酷是真实的世界主流,多看~人与自然~之类的真实~记录...
    井底的动物阅读 204评论 0 0
  • 点一杯熟悉的Cappuccino,坐在习惯的角落,穿着一身简单的深咖色大衣。阳光透过白净的玻璃洋洋洒洒的落在她勾着...
    一苜阅读 367评论 1 3
  • 每到假期,出去散散心,换换心情是最好不过的了。但有的时候,经常会发生没有小伙伴一起同行的情况,但一个人玩耍实在是没...
    最美应用阅读 484评论 0 3
  • 今天下班坐公交车回家,车站上碰到了以前的一个同事,车没来说我们就唠嗑。一会,车来了,他先上了车,投了两块钱,我说,...
    伊萨阅读 180评论 3 5