2009-09-21 3 views
1

В принципе, я хочу отправить XML (с текстом Content-Type text/xml) в URL-адрес и отобразить вывод непосредственно в браузере. Это должно быть сделано в iframe.Как разместить XML в iframe с JavaScript

Можно ли разместить XML в iframe? Другими словами, можно ли изменить тип содержимого Post-Request в text/xml? PHP4 также доступен, если необходимо.

URL-адрес в IFrame-действие должно оставаться, так как результат содержит HTML-страницу с относительными ссылками ...

ответ

2

Раньше можно document.open(mimetype) на IFRAME назад в Netscape, но современные браузеры дона» t поддерживает это (и Netscape никогда не поддерживал XML в любом случае).

Во многих браузерах вы можете установить src iframe на data URI, например: data:text/xml,%3Celement%3Ehello%3C/element%3E, при условии, что документ не слишком длинный. Однако это не работает в IE. Таким образом, вы должны были бы по крайней мере, план резервного копирования идти обратно на сервер:

<?php 
    header('Content-Type: text/xml'); 
    echo($_REQUEST('xml')); 
?> 

Затем, если XML было достаточно коротким, чтобы поместиться в URI, вы можете установить его SRC через:

iframe.src= 'http://www.example.com/echoxml.php?xml='+encodeURIComponent(xml); 

Если XML может быть длинным, вы должны были бы использовать запрос POST, что означает представление формы:

var idoc= iframe.contentDocument || iframe.contentWindow.document; // IE compat 
idoc.open(); 
idoc.write('<form method="post" action="http://www.example.com/echoxml.php">'); 
idoc.write(' <textarea name="xml"></textarea>'); 
idoc.write('</form>'); 
idoc.close(); 
idoc.getElementsByTagName('textarea')[0].value= xml; 
idoc.getElementsByTagName('form')[0].submit(); 

Является ли это все стоит? Если вы не используете XSL, неравномерный вид XML, который вы получили бы в большинстве браузеров, вероятно, будет довольно плохим. В более старых/более простых браузерах, которые вообще не отображают XML, вам просто будет предложено загрузить XML-файл.

И опасно разрешать кому-либо вводить любой XML-контент в ваш контекст безопасности. например. если они сделали обратный документ с содержанием XHTML-скриптов, вы были бы уязвимы для межсайтовых сценариев.

+0

Спасибо! Проблема в том, что мне нужно отправить Login-Data в Web-сервис, который возвращает простой HTML или 302-перенаправление на HTML-страницу. И учетные данные могут передаваться только с помощью запроса POST-запроса и Content-Type XML. И я не знаю, как этого добиться. Я пробовал CURL, который работает достаточно хорошо - единственный недостаток: возвращенный HTML содержит ссылки Image и Stylesheet-Links с относительными данными. И поскольку CURL все еще удерживает исходный путь сценария в строке местоположения, относительные пути не работают :-( – acme

+0

Ах, ОК, вы хотите отправить тело запроса XML, это немного другое. Звучит немного странно, что он возвращает HTML с относительными путями, когда браузер никогда не может отправить запрос ... вам нужно было бы обработать возвращенный HTML-код для исправления адресов или добавить элемент '' после использования curl, что немного Если веб-служба является локальной, вы также можете использовать XMLHttpRequest на стороне клиента, чтобы отправить тело XML. – bobince

+0

Теперь я «решил» его, проанализировав возвращаемый html из curl и добавив базовый тег сразу после заголовка, Это довольно уродливо, но, по крайней мере, это работает - и, очевидно, это единственный способ сделать это. Еще раз спасибо! – acme

Смежные вопросы