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

如何获取<object>标签内用户当前访问的网页URL?

获取嵌入Object中页面的当前导航URL

我之前也碰到过类似的需求,要拿到<object>里用户导航后的精确URL,核心得区分同源页面和跨域页面两种情况——浏览器的同源策略是关键限制因素:

1. 同源场景(嵌入页面与主页面域名/协议/端口完全一致)

这种情况最简单,浏览器允许主页面直接访问嵌入页面的window对象,你可以通过contentWindow属性获取当前URL:

// 获取object元素
const webFrame = document.getElementById('webUrl');

// 一定要等object加载完成后再操作,否则contentWindow可能无法访问
webFrame.onload = function() {
    const currentUrl = webFrame.contentWindow.location.href;
    console.log('用户当前访问的URL:', currentUrl);
};

你也可以在需要的时候主动调用(比如点击按钮时),只要确保object已经加载完成就行。

2. 跨域场景(嵌入页面与主页面不同源)

这时候浏览器的同源策略会阻止你直接访问contentWindow,毕竟跨域访问框架内部信息是严重的安全风险。不过有两种可能的解决思路:

如果你能控制嵌入的pageweb.com站点

可以用postMessage机制让嵌入页面主动把当前URL发送给主页面:

  • 首先在嵌入页面(pageweb.com的代码里)添加监听,页面加载或导航变化时发送URL:
    // 页面加载完成时发送URL
    window.addEventListener('load', () => {
        // 第二个参数填你的主页面域名,比如'https://your-main-site.com',不要用*(生产环境)
        window.parent.postMessage(
            { type: 'frameUrl', url: window.location.href },
            'https://your-main-site.com'
        );
    });
    
    // 如果是单页应用,还要监听路由变化(比如hash路由)
    window.addEventListener('hashchange', () => {
        window.parent.postMessage(
            { type: 'frameUrl', url: window.location.href },
            'https://your-main-site.com'
        );
    });
    
  • 然后在主页面添加消息监听,接收嵌入页面发来的URL:
    window.addEventListener('message', (event) => {
        // 验证消息来源,只处理pageweb.com发来的消息
        if (event.origin !== 'http://www.pageweb.com') return;
        
        if (event.data.type === 'frameUrl') {
            console.log('用户当前访问的URL:', event.data.url);
            // 这里可以把URL存到变量或者展示到页面上
        }
    });
    

如果你无法控制嵌入的pageweb.com站点

很遗憾,出于安全考虑,浏览器不允许你的JS脚本获取跨域框架的URL——你在Chrome右键看到的URL是浏览器本身有权限访问的,但脚本没有这个权限,这种情况下没有直接的解决方案。


内容的提问来源于stack exchange,提问作者Eddy MERCIER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:27:38