代码之家  ›  专栏  ›  技术社区  ›  vrintle Jake

在CodePen[duplicate]等在线编辑器中选择iframe

  •  0
  • vrintle Jake  · 技术社区  · 6 年前

    我有一个IFrame,它调用同一个域页。

    详细信息:有几个iframe就像这个一样,可以加载相同的页面,因为我正在编程一个Windows环境。我打算关闭这个Iframe,这就是为什么我需要知道我应该从他体内关闭哪个Iframe。我有一个数组保存对这些iframe的引用。

    0 回复  |  直到 8 年前
        1
  •  144
  •   Aquatic    16 年前

    还可以将name和ID设置为相等的值

    <iframe id="frame1" name="frame1" src="any.html"></iframe>
    

    parent.document.getElementById(window.name);
    
        2
  •  92
  •   Rob W jminkler    13 年前

    打个电话就行了 window.frameElement 如果页面不在框架中,则 frameElement null

    /**
     * @param f, iframe or frame element
     * @return Window object inside the given frame
     * @effect will append f to document.body if f not yet part of the DOM
     * @see Window.frameElement
     * @usage myFrame.document = getFramedWindow(myFrame).document;
     */
    function getFramedWindow(f)
    {
        if(f.parentNode == null)
            f = document.body.appendChild(f);
        var w = (f.contentWindow || f.contentDocument);
        if(w && w.nodeType && w.nodeType==9)
            w = (w.defaultView || w.parentWindow);
        return w;
    }
    
        3
  •  85
  •   Kenneth Lynne    12 年前

    我建议使用 postMessage API .

    在iframe中,呼叫:

    window.parent.postMessage({message: 'Hello world'}, 'http://localhost/');
    

    在该页面中,您将包含iframe,您可以监听以下事件:

    window.addEventListener('message', function(event) {
          if(event.origin === 'http://localhost/')
          {
            alert('Received message: ' + event.data.message);
          }
          else
          {
            alert('Origin not allowed!');
          }
    
        }, false);
    

    在johnresigs博客上阅读更多关于postmessageapi的信息 here

        4
  •  30
  •   ingredient_15939    14 年前

    老问题,但我只是有同样的问题,并找到了一种方法来获得iframe。只需遍历父窗口的frames[]数组,并针对运行代码的窗口测试每个框架的contentWindow。例子:

    var arrFrames = parent.document.getElementsByTagName("IFRAME");
    for (var i = 0; i < arrFrames.length; i++) {
      if (arrFrames[i].contentWindow === window) alert("yay!");
    }
    

    或者,使用jQuery:

    parent.$("iframe").each(function(iel, el) {
      if(el.contentWindow === window) alert("got it");
    });
    

        5
  •  22
  •   Machavity Labib Hussain    11 年前

    你可以用 parent 访问父页。因此,要访问函数:

    var obj = parent.getElementById('foo');
    
        6
  •  14
  •   Akash Kava    13 年前

    设置iframe的id之后,您可以从内部文档访问iframe,如下所示。

    var iframe = parent.document.getElementById(frameElement.id);
    

        7
  •  6
  •   Clawfire    13 年前

    也许只是使用

    window.parent
    

    进入iframe以获取调用帧/窗口。如果有多个调用帧,可以使用

    window.top
    
        8
  •  3
  •   Mark Porter    16 年前

    尝试以下方法,在父帧中设置IFRAMEs,如下所示:

    <iframe id="frame1" src="inner.html#frame1"></iframe>
    <iframe id="frame2" src="inner.html#frame2"></iframe>
    <iframe id="frame3" src="inner.html#frame3"></iframe>
    

    注意,每个帧的id在src中作为锚传递。

    然后在你的内部html中,你可以通过访问它加载到的框架的id位置.hash:

    <button onclick="alert('I am frame: ' + location.hash.substr(1))">Who Am I?</button>
    

        9
  •  -2
  •   Alex    13 年前
    // just in case some one is searching for a solution
    function get_parent_frame_dom_element(win)
    {
        win = (win || window);
        var parentJQuery = window.parent.jQuery;
        var ifrms = parentJQuery("iframe.upload_iframe");
        for (var i = 0; i < ifrms.length; i++)
        {
            if (ifrms[i].contentDocument === win.document)
                return ifrms[i];
        }
        return null;
    }