V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
v2gf
V2EX  ›  JavaScript

能通过 js 或者 jquery 检测到 iframe 内的网页是否使用了同源策略吗?

  •  
  •   v2gf · 2018-03-07 13:38:01 +08:00 · 3886 次点击
    这是一个创建于 2437 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要通过 iframe 打开别人的网页,但是有的网站使用了同源策略,导致内容打不开,现在想知道有没有办法知道 iframe 的页面是否使用了同源策略,然后根据判断去做处理
    第 1 条附言  ·  2018-03-07 18:57:27 +08:00
    一旦跨域,不管有没有设置 x-frame-options,都无法读取到 iframe 里面的内容了,既然前台浏览器不能检测,只能在后台做,我的做法是页面加载完成之后,把要用 iframe 打开的 url 用 Ajax 传到后台去,用 HttpUnit 打开,获得 response header,判断是否有 x-frame-options,把判断结果传回前台做处理。之所以用 HttpUnit,是因为要打开的网站会多次跳转。
    7 条回复    2018-03-08 13:35:35 +08:00
    DOLLOR
        1
    DOLLOR  
       2018-03-07 15:47:20 +08:00
    随手写的,仅供参考

    /**
    * 检查 iframe 是否跨域
    * @param iframeElement {HTMLIFrameElement}
    * @return {Boolean}
    */
    var isCrossorigin = function (iframeElement){
    var crossOrigin;
    try{
    // 如果不跨域,contentDocument 就存在
    crossOrigin = !iframeElement.contentDocument;
    }catch(er){
    // 如果跨域,就会抛出异常
    crossOrigin = true;
    }
    return crossOrigin;
    }
    zhidian
        2
    zhidian  
       2018-03-07 16:05:53 +08:00
    v2gf
        3
    v2gf  
    OP
       2018-03-07 18:42:29 +08:00
    @DOLLOR 谢谢,但是这样只能检测是否跨域,我想知道的是 response header 里面是否设置了 X-FRAME-OPTIONS,目前看了一下是没有可能了
    v2gf
        4
    v2gf  
    OP
       2018-03-07 18:43:45 +08:00
    @zhidian 好的,看了一下,一旦设置了 X-FRAME-OPTIONS,就无法在 iframe 外面读到里面的内容了
    coffeSlider
        5
    coffeSlider  
       2018-03-08 08:57:29 +08:00 via Android
    你想要通过 iframe 操作别人的网页是不可能的,如果仅做展示,可以用两层 iframe 嵌套。
    v2gf
        6
    v2gf  
    OP
       2018-03-08 12:11:24 +08:00
    @coffeSlider 只做展示,两层怎么操作?
    coffeSlider
        7
    coffeSlider  
       2018-03-08 13:35:35 +08:00 via Android
    @v2gf
    emmm
    两层 iframe 啊,这个表述有什么问题吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1510 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:56 · PVG 07:56 · LAX 15:56 · JFK 18:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.