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传递给你的脚本:
- 打开注册表编辑器,找到你添加的右键菜单项(比如
HKCR\InternetExplorer\MenuExt\你的自定义菜单名) - 修改默认值为你的
test.html路径,同时加上参数:C:\你的路径\test.html?url=%1 - 然后在
test.html里通过window.location.search解析URL参数,就能直接拿到目标页面的URL了,完全不需要ActiveX。
这种方法更安全稳定,前提是你有权限修改系统注册表。
内容的提问来源于stack exchange,提问作者raspi surya
相关产品推荐
相关产品推荐

