You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IE右键菜单中通过JavaScript获取当前窗口URL的实现方法

解决IE右键自定义菜单获取当前窗口URL的问题

嘿,我太懂你踩的这个坑了——你的脚本现在跑在自己的test.html上下文里,自然拿不到目标IE窗口的真实URL。别着急,下面给你两个靠谱的解决思路,都是针对IE环境量身定做的:

方法1:通过Shell.Application匹配当前激活的IE窗口

这是最直接的实现方式,利用Windows的Shell对象获取所有打开的IE窗口,找到当前触发右键操作的那个窗口就能拿到它的URL了。把这段代码放到你的test.html里:

function getActiveIEUrl() {
    try {
        // 创建Shell.Application对象,用来访问系统窗口列表
        const shell = new ActiveXObject("Shell.Application");
        const allWindows = shell.Windows();
        
        // 遍历所有窗口,筛选出IE窗口并匹配当前激活的实例
        for (let i = 0; i < allWindows.Count; i++) {
            const currentWindow = allWindows.Item(i);
            // 确认是IE窗口,并且和触发右键的窗口句柄一致
            if (currentWindow.Name === "Internet Explorer" && currentWindow.hwnd === window.top.hwnd) {
                return currentWindow.LocationURL;
            }
        }
        return "未找到当前IE窗口的URL";
    } catch (e) {
        return "获取失败:" + e.message;
    }
}

// 点击自定义菜单选项时调用这个函数就行
// 比如绑定到按钮点击:onclick="alert(getActiveIEUrl())"

关键注意点:

  • IE的安全设置会限制ActiveX运行,你需要把test.html所在路径加入IE的可信站点,或者临时降低对应区域的安全级别(允许运行未标记为安全的ActiveX控件)。
  • 这个方法只适用于IE,毕竟其他浏览器根本不支持Shell.Application这类ActiveX对象。

方法2:通过注册表直接传递URL(更稳定的进阶方案)

如果你的右键菜单是通过注册表HKCR\InternetExplorer\MenuExt路径添加的,其实可以直接在注册表配置里让IE主动把当前页面URL传递给你的脚本:

  1. 打开注册表编辑器,找到你添加的右键菜单项(比如HKCR\InternetExplorer\MenuExt\你的自定义菜单名)
  2. 修改默认值为你的test.html路径,同时加上参数:C:\你的路径\test.html?url=%1
  3. 然后在test.html里通过window.location.search解析URL参数,就能直接拿到目标页面的URL了,完全不需要ActiveX。

这种方法更安全稳定,前提是你有权限修改系统注册表。


内容的提问来源于stack exchange,提问作者raspi surya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:09:11