能力不足,眼力辅助——山寨CSDN发帖表情插件

今天想说的,是怎样不看教程,直接山寨。实际上不可能每次山寨都有资料可寻,用到的知识点也不可能都是我们会的。怎么在这样的情况下山寨出成品,是对手艺、对眼力的考验。在我们能力不足的时候,善于观察的眼力往往可以解决很大的问题。

今天看到咖啡猫发布了「兔子表情2.0」(参见此处),大概看了下,发现是通过加载某个js文件实现的。


(感谢咖啡猫辛勤的劳动。)


说实话,我对javascript并不熟悉,但它只有一个文件,我想实现难度并不高,不妨来山寨一番。

怎样山寨一个自己并不熟悉的东西?有人说了,去看书,学一遍再来。那你这智商真的让我们大家都深表遗憾。

我们需要的只是常识+眼力。

也许有人马上要喷了,这个简单你才能吹牛逼,复杂的东西你还行吗?

对此我想说,你非得时刻都让我们替你遗憾吗?复杂的东西,我肯定不行,既然复杂,难道我看看书,学一遍就行了?省省吧,有那精力,我不如找几个精通的人来搞。我虽然提倡自力更生,但也得有个效率和限度啊。

下面开始分析。

山寨一个东西,尤其是这种表情插件,几个关键地方改成我们自己的:logo、提示文字、标题、表情图片,那就针对这几个地方去找。

首先从原版的使用方法开始。原版是通过点击发帖工具栏上的「管理UBB插件」按钮,进入插件管理窗口,在插件地址处输入插件的js文件地址(http://tim-tang.googlecode.com/files/demo.js)实现安装的,就像这样。



然后工具栏上会出现自定义插件的图标,鼠标移上去会有工具提示,点开后就可以输入表情,像这样。(图片摘自咖啡猫的帖子)



下一步怎么办?从什么地方切入呢?

观察

我们现在获得的信息有哪些?第一,js文件路径,第二插件图标,第三,插件界面。

那么从js文件入手,由于有了绝对路径,所以可以通过把路径粘贴到浏览器地址栏,来下载这个js文件,就像这样。



点击保存,我们用记事本打开这个js文件(或者dw或者vs随便)。

首先看到的就是这样的代码。很好,文件没有加密,这就让以下的山寨成为了可能。

var CsdnScriptPlugin999 = {
    /// <summary>
    /// 接口版本
    /// </summary>
    interfaceVersion: "1.0",

    /// <summary>
    /// 插件标题,显示给用户看
    /// </summary>
    caption: "由兔子党Tim(q107770540)提供的兔子表情插件V2.0",

    /// <summary>
    /// 设计者在CSDN的ID 
    /// </summary>
    designer: "q107770540",

    /// <summary>
    /// 按钮对象,可选项
    /// </summary>
    buttons: {},

    /// <summary>
    /// 分隔条对象,可选项
    /// </summary>
    separators: {},

    /// <summary>
    /// 装载
    /// </summary>
    load: function () { 
        this.separators["icon"] = CsdnScriptWorkshop.addSeparator(); 
        this.buttons["icon"] = CsdnScriptWorkshop.addButton(
            "由兔子党Tim(q107770540)提供的兔子表情插件V2.0",
            "http://tim-tang.googlecode.com/files/24.gif",
            function () {
                var htmlDialog = str_Html();
                var point = absolutePoint(this);
                CsdnScriptWorkshop.showDialog("兔子表情", htmlDialog, point.x, point.y + 18, 400, 220);
            });
    },

这太简单了,根本不需要学js,直接修改成我们的内容。

    /// <summary>
    /// 插件标题,显示给用户看
    /// </summary>
    caption: "由野比(conmajia)提供的旺旺表情插件V1.0",

    /// <summary>
    /// 设计者在CSDN的ID 
    /// </summary>
    designer: "conmajia",

注意这个地方:「"http://tim-tang.googlecode.com/files/24.gif",」,在我们山寨的时候要善于抓住关键点,这里我们应该敏锐的看到「24.gif」,说明这是一张图片,它的前面一句话「this.buttons["icon"]」,关键词icon,说明这个部分和图标相关。把图标地址粘贴到浏览器地址栏,查看,发现这张图标就是UBB工具栏上的插件图标。所以把它换成我们自己的图标。

    /// <summary>
    /// 装载
    /// </summary>
    load: function () { 
        this.separators["icon"] = CsdnScriptWorkshop.addSeparator(); 
        this.buttons["icon"] = CsdnScriptWorkshop.addButton(
            "由野比(conmajia)提供的旺旺表情插件V1.0",
            "https://i-blog.csdnimg.cn/blog_migrate/ec18a031d7789b514fe15030f8f0a19b.gif",
            function () {
                var htmlDialog = str_Html();
                var point = absolutePoint(this);
                CsdnScriptWorkshop.showDialog("野比的旺旺表情", htmlDialog, point.x, point.y + 18, 400, 220);
            });
    },

继续往下看,有这段代码

var imgCount = 60;
var userName = "";  
function str_Html() { 
    var str = "<div style=\" width:360px; height:200px; position:relative\"><div id=\"div2\" style=\"padding:10px;width:335px; height:200px;\">";
    for (var i = 1; i <= imgCount; i++) {
        str += "<img src=\"http://tim-tang.googlecode.com/files/" + i + ".gif\" title=\"由兔子党Tim(q107770540)提供的兔子表情插件V2.0\" width=\"20px\" height=\"20px\" style=\"margin:2px; border:1px solid Green;\" οnmοuseοver=\"doit(this)\" />";
    }

可以看到imgCount=60,从字面来看这个应该是image count(图片计数),也就是图片总数,那这个就应该是指表情插件一共有多少个图标。下面有个for循环,i从1到imgCount,循环体里面是一个组合而成的.gif图片地址。这就验证了我们的猜测。把地址换成我们自己图片的地址。

var imgCount = 5;
var userName = "";  
function str_Html() { 
    var str = "<div style=\" width:360px; height:200px; position:relative\"><div id=\"div2\" style=\"padding:10px;width:335px; height:200px;\">";
    for (var i = 1; i <= imgCount; i++) {
        str += "<img src=\"http://images.cnblogs.com/cnblogs_com/conmajia/385085/r_" + i + ".gif\" title=\"由野比(conmajia)提供的旺旺表情插件V1.0\" width=\"20px\" height=\"20px\" style=\"margin:2px; border:1px solid Green;\" οnmοuseοver=\"doit(this)\" />";
    }

保存js文件,找一个空间上传。(我传到了博客园,地址是http://files.cnblogs.com/conmajia/demo.js)

现在开始测试,点开管理器,装载我们自己的js插件。



于是乎,不出所料,我们的插件出来了。



点开看看,可以看到已经基本成功。



下面测试下:

      

完全成功。

通过简单的分析,做出自己的插件。相信今后会涌现出不少有趣的表情插件甚至其他功能插件。欢迎大家发挥创意。


鸣谢

咖啡猫(q107770540)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
一直以来都比较羡慕那些,界面美观,功能强大的即时通讯软件,自己慢慢摸索了好长时间,用MFC做了一个聊天程序主窗口演示小程序。 该程序主要自定义了CRichEditCtrl控件,使用XML技术与GDI处理各种图片及QQ表情组件,串行化数据等,使得程序拥有了一般聊天程序应用的特色(同时仿FeiQ程序的自动释放程序运行需要的资源到安装目录): 支持字体设置、图文混排、表情及各种格式图片的插入、发送与保存,聊天记录的保存等等... 1、聊天输入、输出窗口:使用CRichEditCtrl控件,扩展后方便了字体设置、图文混排、表情及各种格式图片的插入,及窗口上右键菜单的功能。 2、聊天表情:这一部分是我精心制作的,使用GDI处理各种图片使得程序支持各种格式图片的预览、插入、保存。使用XML技术,方便快捷管理表情数据。自动释放表情图片资源(程序所在目录)及QQ表情组件(放到\System32\ImageOle.dll),程序自动注册组件,让程序支持GIF格式表情的插入。程序仿FeiQ自动生成表情页面缓存图片,快捷增加大量表情。本程序生成缓存图时,使用多线程技术,增加、修改完后立即更新页面缓存图,几千张图片,马上生成完成。 3、表情管理:支持表情的添加、删除、修改,移动,导入、导出表情库等,修改完后自动删除需要更新的页面缓存图,及程序程序无关的文件等。 4、聊天记录:使用串行化数据技术,将聊天记录生成到Log.dat文件中,可分页浏览记录。 本程序本人精心制件,最近一段时间在弄一个即时通讯软件,程序马上完工,完工后立即上传,由于弄程序花了不少精力,出于私心暂时不公布了。。。。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Conmajia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值