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
    }
  • 相关阅读:
    【13NOIP提高组】货车运输(洛谷P1967)(Acwing.506)(一本通1877)
    Acwing136. 邻值查找(《算法竞赛进阶指南》)
    python 万能时间格式转换
    解决高并发的方法
    2020年春季学期《软件工程》课程总结
    语文知识点
    地理知识点
    外接球问题
    人船模型
    动量定理流体问题
  • 原文地址:https://www.cnblogs.com/hyaray/p/14327475.html
Copyright © 2011-2022 走看看