zoukankan      html  css  js  c++  java
  • AutoHotkey 参考 JavaScript 的 window.location 对网址进行分解

    在JavaScript里,window.location有各种参数,对于分析网址很方便,于是AutoHotkey也写了个

    假如有如下网址

    http://www.a.com.cn:80/dir/aa.html?ver=1#h
    

    则分解后内容如下所示

    href     http://www.a.com.cn:80/dir/aa.html?ver=1#h
    protocol http:
    origin   http://www.a.com.cn:80
    host     www.a.com.cn:80
    hostname www.a.com.cn
    domain   a.com.cn
    main     a
    port     80
    pathname /dir/aa.html
    search   ?ver=1
    hash     #h
    

    附上AutoHotkey代码,其中 domain和main 的获取需要改进。

    如果指定了key,则返回字符串,否则返回格式是对象

    /*
    http://www.a.com.cn:80/dir/aa.html?ver=1#h
    href    http://www.a.com.cn:80/dir/aa.html?ver=1#h
    protocol    http:
    origin    http://www.a.com.cn:80
    host    www.a.com.cn:80
    hostname    www.a.com.cn
    domain    a.com.cn
    main    a
    port    80
    pathname    /dir/aa.html
    search    ?ver=1
    hash    #h
    */
    location(url, key:="") {
        obj := {}
        ;href (前面添加 http://,后面删除/)
        obj.href := rtrim(url, "/")
        if (!instr(obj.href,"//"))
            obj.href := "http://" . obj.href
        arr := StrSplit(obj.href, "/")
        obj.protocol := arr[1]
        obj.origin := StrLower(format("{1}//{2}",arr[1],arr[3]))
        obj.host := StrLower(arr[3])
        ; hostname 和 port
        if instr(obj.host, ":") {
            arr := StrSplit(obj.host, ":")
            obj.hostname := arr[1]
            obj.port := arr[2]
        } else {
            obj.hostname := obj.host
            obj.port := ""
        }
        ;获取 domain
        if (obj.hostname ~= "^d+(.d+){3}$") {
            obj.main := ""
            obj.domain := obj.hostname
        } else {
            arr := StrSplit(obj.hostname, ".")
            l := arr.length()
            if (arr[l] == "cn" && arr[l-1] == "com") { ;TODO 需完善
                obj.main := arr[l-2]
                obj.domain := format("{1}.{2}.{3}", obj.main,arr[l-1],arr[l])
            } else {
                obj.main := arr[l-1]
                obj.domain := format("{1}.{2}", obj.main,arr[l])
            }
        }
        ;处理 origin 后面的内容
        sNow := substr(obj.href, strlen(obj.origin)+1)
        ;先获取末尾的 hash
        if instr(sNow,"#") {
            obj.hash :=  "#" . RegExReplace(sNow, ".*#")
            sNow := substr(sNow, 1, strlen(sNow)-strlen(obj.hash))
        } else
            obj.hash := ""
        ;再获取 search
        if instr(sNow,"?") {
            obj.search :=  "?" . RegExReplace(sNow, ".*?")
            sNow := substr(sNow, 1, strlen(sNow)-strlen(obj.search))
        } else
            obj.search := ""
        ;剩余即是 pathname
        obj.pathname := sNow
        return (strlen(key) && obj.haskey(key)) ? obj[key] : obj
    }
  • 相关阅读:
    Hive UDF 用户自定义函数 编程及使用
    Hive 常用命令和语句
    Hive 配置显示表头和数据库信息
    Hive 安装配置
    Hadoop完全分布式集群环境搭建
    Java 文件切割工具类
    MongoDB 安装配置
    NodeJS 安装配置
    Java 截屏工具类
    Maven 配置本地依赖jar
  • 原文地址:https://www.cnblogs.com/hyaray/p/14327475.html
Copyright © 2011-2022 走看看