Windows
Windows 编程

删除JavaScript调试函数

此代码为Java语言编写,如果错误还望指出。

import org.omg.CORBA.INTERNAL;
public class Main {
    public static   boolean isJo(int i){
        if(i % 2 == 0){
            return true;
        }else{
            return false;
        }
    }
   public static int[] getConsolePoint(String con) {
        int[] p = new int[]{0, 0};
        try {
            String orignal = new String(con.getBytes(), "UTF-8");
            p[0] = con.toLowerCase().indexOf("console.log");
            int s = 0, e = 0,st=0,ov=0;
            for (int i = p[0]; i < orignal.length(); i++) {
                char ch = orignal.charAt(i);
                if(String.valueOf(ch).equals("\"") || String.valueOf(ch).equals("'")){
                    st++;
                }
                if (String.valueOf(ch).equals("(") && isJo(st)){ s++;}
                if (String.valueOf(ch).equals(")") && isJo(st)){ e++;}
                if (s == e && s != 0 && e != 0 && ov==0) {
                    ov=-1; //匹配完毕
                    p[1] = i;
                    continue;
                }
                if(String.valueOf(ch).equals(",") || String.valueOf(ch).equals(";")){
                    if(ov==-1){
                        p[1]=i;
                        return p;
                    }
                }else if(ov==-1){
                    return p;
                }
            }
        } catch (Exception error) {
        }
        return p;
    }
    public static void main(String[] args) {
        String codeText = "123console.log('((22222我');456"+"\n"+"123Console.log('123')456";
        String[] stringList = codeText.split("\n");
        for (int i = 0; i < stringList.length; i++) {
            if (stringList[i].toLowerCase().indexOf("console.log") > -1) {
                int[] p= getConsolePoint(stringList[i]);
                System.out.println("s:"+String.valueOf(p[0])+"\n"+"e:"+String.valueOf(p[1])+"\n"+"str:"+stringList[i].substring(0,p[0])+stringList[i].substring(p[1]+1,stringList[i].length()));
            }
        }
    }
}


结果:

s:3

e:26

str:123456

s:3

e:20

str:123456


Process finished with exit code 0


PhpStorm 插件开发

Phpstorm 的内核其实是:IntelliJ IDEA。隶属于同一个软件公司,所以要开发Phpstorm插件的话,还是得需要IntelliJ IDEA。其实jetbrains开发的ide都可以用IntelliJ IDEA来开发插件。


IntelliJ IDEA:http://www.jetbrains.com/idea/download/

开发文档:http://www.jetbrains.org/intellij/sdk/docs/welcome.html

官网步骤:http://www.jetbrains.org/intellij/sdk/docs/phpstorm/setting_up_environment.html



创建工程的时候选择:intellij platform plugin ,在project sdk的时候选择 intellij idea iu 具体的版本号可以按你电脑里安装的为准。


屏幕快照 2018-09-03 下午9.50.20.png


Next后会出现一个空的工程结构界面,并且会帮你打开plugin.xml描述文件。


屏幕快照 2018-09-03 下午9.52.45.png


<idea-plugin>
  <id>com.your.company.unique.plugin.id</id>
  <name>Plugin display name here</name>
  <version>1.0</version>
  <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>
  <description><![CDATA[
      Enter short description for your plugin here.<br>
      <em>most HTML tags may be used</em>
    ]]></description>
  <change-notes><![CDATA[
      Add change notes here.<br>
      <em>most HTML tags may be used</em>
    ]]>
  </change-notes>
  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
  <idea-version since-build="173.0"/>
  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
       on how to target different products -->
  <!-- uncomment to enable plugin in all products
  <depends>com.intellij.modules.lang</depends>
  -->
  <extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
  </extensions>
  <actions>
    <!-- Add your actions here -->
  </actions>
</idea-plugin>


在上面补充如下代码:

<depends>com.jetbrains.php</depends>
<depends>com.intellij.modules.platform</depends>


注意第二行的id。这里面要填写你的实际包名。如果这个填不对的话,插件是不被ide识别的。其余的可以参考节点名来编写。


点击文件(File)-> Project Structure ->libraries  点击+号,然后选择 java  这里要添加两个文件,这两个文件在phpstorm的安装目录下的plugins里的php目录然后lib目录里。从这个目录结构也可以看出,你编写的插件也可以这样放:plugins/xxx(这个名字你自己取)/lib/目录下。


言归正传,打开plugins/php/lib你会看到几个jar。选择:php.jar 和 php-openapi.jar。这两个就好了。


屏幕快照 2018-09-03 下午10.02.50.png


再次打开Modules-dependencies。然后将compile改为provided。


屏幕快照 2018-09-03 下午10.04.09.png


在你的工程目录下的src右键选择创建一个包


屏幕快照 2018-09-03 下午10.05.08.png

还记得上面提到的id吗?那个id就填写这个包名。这个包名建议格式:com.xxx。例如 com.myplug。这样的话,你的plugin.xml的描述文件里的第二行id也要填写这个。


下面我们来创建一个action。


屏幕快照 2018-09-03 下午10.07.58.png


如下填写


屏幕快照 2018-09-03 下午10.10.32.png


第一个是你的id或者说你的包名

第二个是你的实现类名

第三个是你右键的提示文本

第四个是你的描述文本


由于groups选择的事editorpopupmenu 所以只会在代码编辑区域右键才会弹出这个菜单。下面的keyboard shortcuts是快捷键。可设置可不设置。


下面是编辑器帮你初始化的一个类,包含了一个魔术函数actionPerformed:


package com.myplug;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class delline extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
    }
}


actionPerformed 这个方法调用的事件是:弹出右键菜单,单击后才会调用。


下面这个例子是我写的一个删除空行的例子,仅供参考:



package com.x;
import com.intellij.codeInsight.editorActions.PasteHandler;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
import com.intellij.openapi.editor.actionSystem.EditorActionManager;
import com.intellij.openapi.editor.actionSystem.TypedActionHandler;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.messages.MessagesService;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.rpc.CommandProcessor;
import java.util.List;
import java.awt.*;
import java.util.ArrayList;
public class delBlankLine extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
        final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
        CaretModel caretModel = editor.getCaretModel();
        SelectionModel selectionModel = editor.getSelectionModel();
        Document document = editor.getDocument();
        LogicalPosition logicalPosition = caretModel.getLogicalPosition(); //不带自动换行
        VisualPosition visualPosition = caretModel.getVisualPosition(); //带自动换行产生的行
        String codeText = document.getText().toString();
        String[] stringList = codeText.split("\n");
//      +"\n"+String.valueOf(logicalPosition.column)+"\n"+String.valueOf(logicalPosition.line)
        String lineText = stringList[logicalPosition.line];
        String lineTexts = lineText.replaceAll(" ", "");
        if (lineTexts.equals("")) {
             selectionModel.selectLineAtCaret(); //设置当前行选中
//            EditorActionManager actionManager = EditorActionManager.getInstance();
//            //Insert one more caret below the active caret
//            EditorActionHandler actionHandler = actionManager.getActionHandler(IdeActions.ACTION_EDITOR_DELETE_LINE);
//            actionHandler.execute(editor, caretModel.getCurrentCaret(), e.getDataContext());
            String[] d_arr = delete(logicalPosition.line, stringList);
            final Project project = e.getRequiredData(CommonDataKeys.PROJECT);
            //Access document, caret, and selection
            final int start = selectionModel.getSelectionStart();
            final int end = selectionModel.getSelectionEnd();
            //New instance of Runnable to make a replacement
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    document.setText(arrToString(d_arr).toString());
                }
            };
            WriteCommandAction.runWriteCommandAction(project, runnable);
            selectionModel.removeSelection();
//            Messages.showMessageDialog(arrToString(stringList).toString(), "info", Messages.getInformationIcon());
        }
//        Messages.showMessageDialog(stringList[logicalPosition.line].toString(), "info", Messages.getInformationIcon());
    }
    public String[] delete(int index, String array[]) {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < array.length; i++) {
            list.add(array[i]);
        }
        list.remove(index);
        String[] newStr = list.toArray(new String[1]); //返回一个包含所有对象的指定类型的数组
        return newStr;
    }
    public String arrToString(String array[]) {
        StringBuffer s_b = new StringBuffer();
        for (int i = 0; i < array.length; i++) {
            s_b.append(array[i].toString() + "\n");
        }
        return s_b.toString();
//        return  StringUtils.join(array, "\n");
    }
}



屏幕快照 2018-09-03 下午10.18.28.png




visual basic测试JavaScript 代码随机数重复

VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   8625
   ClientLeft      =   120
   ClientTop       =   465
   ClientWidth     =   14880
   LinkTopic       =   "Form1"
   ScaleHeight     =   8625
   ScaleWidth      =   14880
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command2 
      Caption         =   "Command2"
      Height          =   495
      Left            =   1920
      TabIndex        =   7
      Top             =   4320
      Width           =   1935
   End
   Begin VB.TextBox Text3 
      Height          =   495
      Left            =   720
      TabIndex        =   6
      Text            =   "100"
      Top             =   4440
      Width           =   1095
   End
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   495
      Left            =   1920
      TabIndex        =   3
      Top             =   3600
      Width           =   1935
   End
   Begin VB.TextBox Text2 
      Height          =   7575
      Left            =   4800
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   1
      Top             =   480
      Width           =   9375
   End
   Begin VB.TextBox Text1 
      Height          =   2655
      Left            =   360
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   0
      Text            =   "Form1.frx":0000
      Top             =   360
      Width           =   4215
   End
   Begin VB.Label Label2 
      Caption         =   "Label3"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   14.25
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   735
      Left            =   120
      TabIndex        =   5
      Top             =   6120
      Width           =   1815
   End
   Begin VB.Label Label3 
      Caption         =   "Label3"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   14.25
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H008080FF&
      Height          =   735
      Left            =   2400
      TabIndex        =   4
      Top             =   6120
      Width           =   1815
   End
   Begin VB.Label Label1 
      Caption         =   "Label1"
      BeginProperty Font 
         Name            =   "微软雅黑"
         Size            =   15.75
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   1095
      Left            =   1080
      TabIndex        =   2
      Top             =   7320
      Width           =   2775
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Function Script(code As String) As String
    Dim obj As Object
    Set obj = CreateObject("MSScriptControl.ScriptControl")
    obj.AllowUI = True
    obj.Language = "JavaScript"
    Script = obj.Eval(code)
End Function
Private Sub Command1_Click()
    Label1.Caption = ""
    Label2.Caption = "拟定:" + Text3.Text
    Text2.Text = 2
    Dim i As Long, b As String, s As String
    For i = 1 To Val(Text3.Text)
        b = Script(Text1.Text)
        If InStr(s, b) > 0 Then
            Label1.Caption = "重复"
            Exit For
        Else
            s = s + b + vbCrLf
        End If
        
    Next
    Label1.Caption = "不重复"
    DoEvents '交出时间片
    Text2.Text = s
    Label3.Caption = "真实:" + CStr(UBound(Split(s, vbCrLf)))
End Sub
Private Sub Command2_Click()
    Label1.Caption = ""
    Label2.Caption = ""
    Label3.Caption = ""
End Sub



实际那种语言都能测,只不过这里是用了vb。

java 绕过ssl访问webservice

private static void trustAllHttpsCertificates() throws Exception {
    javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
    javax.net.ssl.TrustManager tm = new miTM();
    trustAllCerts[0] = tm;
    javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, null);
    javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }
    public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
        return true;
    }
    public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
        return true;
    }
    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
        throws java.security.cert.CertificateException {
        return;
    }
    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
        throws java.security.cert.CertificateException {
        return;
    }
}


在你要

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

以前,运行下面几行代码:

trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
    return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);

所包含的包:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;


另一种方法

SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());