浏览器无刷新,同步更新地址栏数据

同步更新地址栏数据

/**
 * 获取地址栏参数信息
 */
function getUrlQueryString(name: string, type = 'search', detype?: boolean) {
        let newName = name,
            reg = new RegExp('(^|&)' + newName + '=([^&]*)(&|$)', ''),
            paramHash = decodeURI(window.location.hash).substr(1) || '',
            paramSearch = decodeURI(window.location.search).substr(1) || '',
            param
        type === 'search' ? (param = paramSearch) : (param = paramHash)
        let result = param.match(reg)
        if (result !== null) {
            const res = result[2] || ''
            if (detype) return decodeURIComponent(res)
            else return unescape(res)
        }
        return null
    }

/**
 * 同步更新地址栏数据
 * @param list: { key: string; value: string }[]
 */
const updateLocalUrlAll = (list: { key: string; value: string }[]) => {
    
    let baseUrl: string = decodeURIComponent(window.location.href)
    list.forEach((i: Iitem) => {
        const { key = '', value = '' } = i || {}
        const hasKey = baseUrl.indexOf(key + '=') !== -1
        const targetKey = getUrlQueryString(key) || ''

        if (!hasKey) {
            baseUrl.indexOf('?') > -1
                ? (baseUrl = `${baseUrl}&${key}=${value}`)
                : (baseUrl = `${baseUrl}?${key}=${value}`)
        } else {
            baseUrl = baseUrl.replace(key + '=' + targetKey , key + '=' + value)
        }
    })
    // 更新 url
    window.history.replaceState(null, '', baseUrl)
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容