`
CharlesCui
  • 浏览: 427417 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

(轻便)调试JavaScript的旺旺插件(基于jzshmyt的javascript-logger)

阅读更多
Demo如下,大家拍砖吧!


请看下面介绍:







程序代码:

下面代码负责实现和旺旺IM通讯的接口,这里只响应了onClick事件。
using System.Linq;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Text;
using wwsdkcomLib;
using System.Xml;

namespace JSHelper
{
    public class Global
    {
        public static int lPluginCookie;
        public static int lCookie;
        public static object pSlot;
        public static string appid = "18265";
    }
    [ComVisible(true),
    Guid("B221A17A-D3E7-44df-AD67-D45CFA4B5229"),
    ClassInterface(ClassInterfaceType.None)]
    public class Class1 : ISDKPlugin2
    {
        public void OnConnect(object pApplication, int lPluginCookie)
        {
            // OnConnect 不建议使用末态对话框 
            //ISDKPluginQueryResult pqr = (pApplication as ISDKApplication3).GetSubScriptionInfo(lPluginCookie) as ISDKPluginQueryResult;
            //Global.appid = pqr.appID;
        }
        
        public void OnDisconnect(object pApplication, int lPluginCookie)
        {
            // OnDisConnect 不建议使用末态对话框 
            // MessageBox.Show("我被卸载了", "csharp helloworld");
        }



        public void OnNotify(SDKMessageID MsgID, object pParam)
        {

            if (MsgID == SDKMessageID.NOTIFY_OFFLINE)
            {
            }

            else if (MsgID == SDKMessageID.NOTIFY_USERLOGIN)
            {
            }
        }

        public void OnUninstall()
        {
        }

        public void Require()
        {
        }
    }
    [ComVisible(true),
    Guid("950BFC6C-502A-4239-A36E-90893BA3B03E"),
    ClassInterface(ClassInterfaceType.None)]

    public class Class2 : ISDKPluginItem {

        Form1 f1;

        public void OnMenuClick(int lCmdID)
        {
        }

        // 插件作为按钮出现时候得到点击后被调用 
        // 本例中此方法将在点击发生后得到调用 

        public void OnClick()
        {
            try
            {
                this.f1.Show();
            }
            catch(Exception ex)
            {
                this.f1 = new Form1();
                this.f1.Show();
            }
        }

        // 插件接入到插槽后得到通知 

        public void OnCreate(object pSlot, int hParentWnd, int lCookie)
        {

        }

        // 插件在附属插槽被销毁时候得到通知 

        public void OnDestroy()
        {
            // 使用模态对话框可能导致异常 
            // MessageBox.Show("聊天对话框输入工具条插件被销毁", "csharp allinone plugin");
        }

        // 和插件项本身相关的消息通知 

        public void OnNotify(SDKItemNotifyID MsgIDD, object pParam)
        {

        }

        // 当插件以窗口形式出现情况下,在父窗口发生变化情况下得到通知 

        public void OnSize(int cx, int cy)
        {
        }

    }

}


下面代码是JSHelper窗体主程序,没什么意思。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace JSHelper
{
    public partial class Form1 : Form
    {
        String path;
        Form2 f2;
        Form2 f3;
        Form2 f4;
        Form2 f5;
        Form2 f6;

        public Form1()
        {
            InitializeComponent();
            this.path = Application.StartupPath;
            this.webBrowser1.Url = new System.Uri(this.path + "\\plugins\\" + Global.appid + "\\src\\debugger.html", false);
        }

        private void ExamplesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("explorer", this.path + "\\plugins\\" + Global.appid + "\\src\\example\\");//+this.path 
            }
            catch(Exception ex)
            {
                MessageBox.Show("请打开插件中的example目录.\n\n该目录的路径可能如下:\n" + this.path + "\\plugins\\" + Global.appid + "\\src\\example\\");
            }
        }

        private void HideToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void ManualToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                this.f2.Show();
            }
            catch
            {
                this.f2 = new Form2("使用说明", new System.Uri(this.path + "\\plugins\\" + Global.appid + "\\src\\readme\\KingfishersManual.html"));
                this.f2.Show();
            }
        }

        private void AboutJSHelperToolStripMenuItem_Click(object sender, EventArgs e)
        {
            String[] info=new String[7];
            info[0] = "Version:0.9.0";
            info[1] = "Release Date:2008-11-17";
            info[2] = "JSHelper是一款轻巧的Javascript调试工具,";
            info[3] = "以旺旺插件形式发布在阿里软件平台,";
            info[4] = "依赖于jzshmyt所写Kingfishers工具包。";
            info[5] = "方便使用是我的唯一目的。";
            info[6] = "Author : CharlesCui";

            try
            {
                this.f3.Show();
            }
            catch
            {
                this.f3 = new Form2("关于--JSHelper", String.Join("<p/><p/>", info, 0, info.Length));
                this.f3.Show();
            }
        }

        private void JavascriptlogToolStripMenuItem_Click(object sender, EventArgs e)
        {
            String[] info = new String[5];
            info[0] = "Kingfishers是一个用javascript语言编写的,能够代替alert,在浏览器中连续输出客户端javascript脚本运行日志的工具。";
            info[1] = "主要用于客户端脚本的分析和查错。";
            info[2] = "GoogleCode:http://code.google.com/p/dewind/";
            info[3] = "Download:http://dewind.googlecode.com/files/Kingfishers-1.0.rar";
            info[4] = "Author : jzshmyt";

            try
            {
                this.f4.Show();
            }
            catch
            {
                this.f4 = new Form2("关于--Kingfishers", String.Join("<p/><p/>", info, 0, info.Length));
                this.f4.Show();
            }
        }

        private void AboutAuthorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            String[] info = new String[4];
            info[0] = "作者博客:<a href='http://charlescui.iteye.com'>http://charlescui.iteye.com</a>";
            info[1] = "作者邮箱:<a href='mailto:zheng.cuizh@gmail.com?cc=zheng.cuizh@alibaba-inc.com'>zheng.cuizh@gmail.com</a>";
            info[2] = "作者寄语:欢迎广大爱好插件开发(阿里旺旺\\Android)、系统性能调优的朋友们骚扰我!";
            info[3] = "作者MSN:cuizheng.hz@hotmail.com";

            try
            {
                this.f5.Show();
            }
            catch
            {
                this.f5 = new Form2("关于--作者", String.Join("<p/><p/>", info, 0, info.Length));
                this.f5.Show();
            }
        }

        private void ParamsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                this.f6.Show();
            }
            catch
            {
                this.f6 = new Form2("参数说明", new System.Uri(this.path + "\\plugins\\" + Global.appid + "\\src\\readme\\KingfishersManual.txt"));
                this.f6.Show();
            }
        }
    }
}


下面代码是JSHelper实现页面的html:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<html>

<head>
<script type="text/javascript"  src="logger.js" suspended=false simplemode=true skin = true cookie=false></script>
<script>
string_to_code=function(id){
	content=document.getElementById("Content").value;
	return content.split('\n').join(';\n');
}
</script>
</head>
<body>
<table>
<tr><td>
<textarea rows="9" cols="40" id="Content">
//(JSCode)
</textarea>
</tr></td><tr><td>
<input type=button value="Run" onclick='eval(string_to_code("Content"))' id=button1 name=button1/>
<input type=button value="Clear" onclick='(document.getElementById("Content").value="")' id=button2 name=button2/>
<input type=button value="Reset" onclick='(location.reload())' id=button3 name=button3/>
<p/>
</tr></td>
</body>
</html>
  • 大小: 76.9 KB
  • 大小: 84.1 KB
  • 大小: 31.7 KB
分享到:
评论

相关推荐

    javascript-logger工具 - Kingfishers

    6. **可扩展性**:Kingfishers的JavaScript-Logger工具可能支持插件系统,允许开发者添加自定义的日志处理器或适配器,以便将日志发送到其他平台,如服务器日志或第三方日志服务。 7. **轻量级**:由于JavaScript-...

    laravel-query-logger:一种用于记录laravel应用程序所有查询的开发工具

    正在安装$ composer require overtrue/laravel-query-logger -vvv 当LOG_QUERY为true时,将启用Laravel查询记录器。用法$ tail -f ./storage/logs/laravel.log [2017-09-05 14:52:14] local.DEBUG: [800μs] select ...

    深信服日志分析管理系统SIP-Logger白皮书

    深信服日志分析管理系统SIP-Logger白皮书 深信服日志分析管理系统SIP-Logger白皮书是深信服科技股份有限公司发布的一份白皮书,旨在介绍深信服SSLVPN产品的功能和技术优势。本文档详细介绍了深信服SSLVPN三合一网关...

    Go-go-logger一个简单的Go日志管理器

    《Go-go-logger:构建高效日志管理系统》 在软件开发中,日志记录是不可或缺的一部分,它能够帮助开发者追踪程序运行状态、定位错误、优化性能。Go语言,以其简洁的语法和高效的特性,已经成为现代后端开发的热门...

    前端开源库-mocha-logger

    对于 `mocha-logger-master` 压缩包文件,其中可能包含了以下内容: 1. `src/` 目录:存放源代码,包括主要的 `mocha-logger.js` 或 `mocha-logger.ts` 文件,以及可能的辅助工具和配置文件。 2. `test/` 目录:...

    fluent-logger-golang, 用于Fluentd的结构化记录器( Golang ).zip

    fluent-logger-golang, 用于Fluentd的结构化记录器( Golang ) fluent-logger-golang Fluentd ( Golang ) 结构化事件记录器如何安装go get github.com/fluent/fluent-logger-golang/fluent

    Go-go-logger-Go程序的一个简单logger

    在Go语言中,日志处理是非常重要的一部分,它帮助开发者记录程序运行时的状态,以便于调试、监控和问题排查。`go-logger`是专为Go程序设计的一个简单日志库,它提供了一种轻量级的方式来管理和输出日志信息。下面...

    Laravel开发-logger-core

    在本文中,我们将深入探讨基于Laravel框架的“logger-core”组件,这是一个强大的日志管理解决方案,旨在提高开发者在Laravel应用中记录、管理和分析日志的效率。Laravel是PHP社区广泛使用的开源Web应用程序框架,它...

    Python库 | fluent-logger-pyramid-0.0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:fluent-logger-pyramid-0.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Laravel开发-laravel-request-logger

    在Laravel框架中,开发过程中记录HTTP请求的信息是至关重要的,这有助于开发者追踪应用程序的行为,调试问题,以及优化性能。`laravel-request-logger`是一个专门为Laravel设计的中间件,用于记录每次HTTP请求的详细...

    javascript logger

    JavaScript Logger 是一个强大的日志记录工具,主要用于在浏览器环境中调试JavaScript代码。这个工具的主要目标是帮助开发者追踪程序运行过程中的各种事件,捕获错误信息,以及优化代码性能。通过使用JavaScript ...

    前端开源库-panto-logger

    在 `panto-logger-master` 压缩包中,包含的主要文件和目录可能有以下几部分: 1. `src/`:源代码目录,包含 `panto-logger` 的核心实现。 2. `lib/`:编译后的代码,用于实际项目中引用。 3. `examples/`:示例...

    前端开源库-redux-logger

    在压缩包文件`redux-logger-master`中,可能包含了Redux Logger的源码、文档、示例等资源,你可以通过查阅这些资料进一步学习如何使用和定制这个插件,以满足你的项目需求。同时,它也可能是为了演示如何将Redux ...

    Laravel开发-laravel-gelf-logger

    在Laravel框架中,日志记录是至关重要的,它帮助开发者追踪应用程序的运行状态,调试错误,以及在问题发生时快速定位原因。`laravel-gelf-logger` 是一个专门为Laravel设计的扩展包,目的是将日志数据发送到与Gray...

    Laravel开发-laravel-sql-logger

    `laravel-sql-logger-master`这个文件名表明它是项目的主分支或主版本,通常包含完整的源代码。我们可以通过将这个包安装到项目中,利用其提供的服务提供者和服务配置,来集成这个日志器。安装过程通常涉及使用...

    Laravel开发-request-logger

    在Laravel框架中,日志记录是至关重要的,它帮助开发者追踪应用运行时的问题,调试代码,以及监控系统的性能。`request-logger`是针对Laravel和Lumen这两个基于PHP的微服务框架的一个扩展,旨在方便地记录HTTP请求的...

    PyPI 官网下载 | custom-logger-cloudcity-0.0.1.tar.gz

    标题提到的"PyPI 官网下载 | custom-logger-cloudcity-0.0.1.tar.gz"是指一个在PyPI上发布的名为`custom-logger-cloudcity`的Python库的版本0.0.1,它被打包成一个`.tar.gz`文件。 `.tar.gz`是一种常见的压缩格式,...

    前端开源库-redux-cli-logger

    在压缩包文件`redux-cli-logger-master`中,可能包含了项目的源代码、示例、测试用例以及相关的文档。通过阅读源代码,开发者可以更深入地理解其工作原理,甚至可以对其进行二次开发或扩展。 总结来说,Redux-CLI-...

    前端开源库-logger-app

    在"logger-app"中,JavaScript可能采用了诸如React、Vue或Angular等现代框架,这些框架提供了组件化开发模式,提高了代码的可复用性和可维护性。 接下来,让我们探讨一下日志管理。日志文件记录了系统、应用或服务...

    PyPI 官网下载 | python-json-logger-0.1.4.tar.gz

    `python-json-logger-0.1.4.tar.gz`是`python-json-logger`库的版本0.1.4的源代码压缩包,该压缩包包含了库的所有源文件,通常包含`setup.py`(用于安装)、`README`(介绍库的使用和特性)、`LICENSE`(授权信息)...

Global site tag (gtag.js) - Google Analytics