代码之家  ›  专栏  ›  技术社区  ›  Derek Lawrence

检测页面是否在iframe内并获取iframe id

  •  0
  • Derek Lawrence  · 技术社区  · 7 年前

    我们有一个游戏,我们的一个客户正在尝试将游戏加载到他们的iframe中。出于某种原因,他们需要锁定地址栏,并在iFrame中添加了滚动=“否”样式。

    这打破了我们的游戏,因为我们有一个滚动覆盖,他们永远无法摆脱。

    我正在寻找一种方法来获取iframe并检查iframe id,而无需在其域上执行跨域策略。这可能吗。我只需要iframeID,或者检查样式,看看它是否可以滚动。

    我觉得这是不可能的,因为浏览器跨域安全,但我想问一下这里,看看是否有人有任何建议。

    我正在尝试这个。

    var ganFrame = document.getElementById( ganId );
    

    返回null,应该返回null

    使命感

    var ganFrame = window.top.getElementById( ganId );
    

    但我得到了预期的跨域错误。是否有一种方法可以检测到此iframe而不出错。我不需要访问它,只是想看看它是否存在。

    我能检测出窗户是否开着。顶部!=窗但我们还有其他客户需要我们在iframe中使用覆盖。

    笔记

    客户端不会更改其iframe的行为方式。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Lusito    7 年前

    客户端不会更改其iframe的行为方式。

    您的客户是否愿意更改游戏的url? 例如,您可以让他们在url中传递一个参数,如: https://mygame.com/game.php?noScrollMode=true

    您可以检查文档。referrer已设置,但用户可能会禁用referrer并破坏您的代码。

        2
  •  0
  •   Derek Lawrence    7 年前

    我知道这是一个黑客,但它解决了我的问题。

    因为我知道我要寻找的帧的id,所以我可以使用此代码来获得所需的效果。

    if(window.top != window.self){
        try {
            var ganFrame = window.top.getElementById("gameFrame");
        }
        catch ( e ) {
            isIOS7HelperDisabled = true;
        }
    }
    

    只希望不会由此引发其他错误。可能需要检查错误类型。