Закройтесь iframe пересекают домен

Я пытаюсь сделать что-то подобное приложению Clipper здесь http://www.polyvore.com/cgi/clipper

Я могу заставить iframe появиться в другом веб-сайте (пересеките домен). Но я не могу сделать "близкую" кнопку для работы.

Это - то, что я использовал, но это не работает на перекрестный домен (в основном удаляют iframe элемент),

window.parent.document.getElementById('someId').parentNode.removeChild(window.parent.document.getElementById('someId'));    

Можно ли помочь? Спасибо.

10
задан HP. 2 February 2010 в 05:18
поделиться

2 ответа

Вы должны использовать библиотеку, которая реферация этого (например, http://easyxdm.net/wp/ , не тестировала). Обмен идентификаторами фрагментов может не работать во всех браузерах, и есть лучшие подходы, такие как PostMessage .

Тем не менее, ваш пример (Clipper) использует взлома под названием обмен сообщениями фрагмента . Это может быть кросс-браузер, при условии, что страница, содержащая вашу IFrame, является верхним уровнем. Другими словами, в общей сложности два уровня. По сути, ребенок устанавливает фрагмент родителя, а родительские часы для этого.

Это аналогичный подход к Clipper's:

partent.html

<html>
<head>
<script type="text/javascript">
function checkForClose()
{
    if(window.location.hash == "#close_child")
    {
      var someIframe = document.getElementById("someId");
      someIframe.parentNode.removeChild(someIframe);
    }
    else
    {
      setTimeout(checkForClose, 1000)
    }
}
setTimeout(checkForClose, 1000);
</script>
</head>
<body>
<iframe name="someId" id="someId" src="child.html" height="800" width="600">foo</iframe>
</body>
</html>

Child.html:

<html>
<head>
<script type="text/javascript">
setTimeout(function(){window.parent.location.hash = "close_child";}, 5000);
</script>
<body style="background-color: blue"></body>
</html>

edit2: кросс-домен и независимо управляемые различными. Я выкопал в (сильно заминированный / запутанный) полирурный код, чтобы увидеть, как он работает (кстати, он не в Firefox). Сначала помните, что закладки, такие как Clipper, живут в контексте открытой страницы, когда они начнутся. В этом случае нагрузки в закладки скрипт , который, в свою очередь, управляет функцией init, которая генерирует , а также работает , но также работает:

Event.addListener(Event.XFRAME, "done", cancel);

, если вы Digg в AddListener, вы Найти ( Украшено ):

if (_1ce2 == Event.XFRAME) {
                        if (!_1cb3) {
                            _1cb3 = new Monitor(function () {
                                return window.location.hash;
                            },
                            100);
                            Event.addListener(_1cb3, "change", onHashChange);
                        }
                    } 

Отмена включает в себя:

removeNode(iframe);

Теперь единственная оставшаяся часть заключается в том, что страница Iframe другой скрипт с помощью ClipPerform. Функция init, которая включает в себя:

Event.addListener($("close"), "click", function () {
            Event.postMessage(window.parent, _228d, "done");
        });

, поэтому мы ясно видим, что они используют обмен сообщениями фрагмента.

19
ответ дан 3 December 2019 в 19:32
поделиться

Попробуйте скрывать содержимое Iframe и не беспокойтесь о фактическом избавлении от элемента IFrame в родительском языке.

1
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: