Ответ 1
Да, это должно быть возможно, даже если сайт из другого домена.
Например, на странице HTML на моем сайте у меня есть iFrame, содержимое которого получено с другого сайта. Содержимое iFrame - это одно поле выбора.
Мне нужно уметь читать выбранное значение на моем сайте. Другими словами, мне нужно использовать список выбора из другого домена внутри моего собственного приложения. Я не контролирую любые настройки сервера.
Первоначально, поэтому у нас может возникнуть соблазн сделать что-то подобное (упрощенное):
HTML на моем сайте:
<iframe name='select_frame' src='http://www.othersite.com/select.php?initial_name=jim'></iframe>
<input type='button' name='save' value='SAVE'>
Содержимое HTML iFrame (загружено из select.php
в другой домен):
<select id='select_name'>
<option value='john'>John</option>
<option value='jim' selected>Jim</option>
</select>
JQuery
$('input:button[name=save]').click(function() {
var name = $('iframe[name=select_frame]').contents().find('#select_name').val();
});
Однако я получаю эту ошибку javascript, когда пытаюсь прочитать значение:
Заблокировано кадр с источником " http://www.myownsite.com" от доступа к кадру с исходным кодом http://www.othersite.com ". Протоколы, домены и порты должны соответствовать.
Чтобы обойти эту проблему, кажется, что вы можете косвенно передавать iFrame из script на свой собственный сайт и иметь script для чтения содержимого с другого сайта с помощью метода типа file_get_contents()
или curl
и т.д.
Итак, создайте script (например: select_local.php
в текущем каталоге) на своем собственном сайте с таким же содержимым:
PHP-контент select_local.php:
<?php
$url = "http://www.othersite.com/select.php?" . $_SERVER['QUERY_STRING'];
$html_select = file_get_contents($url);
echo $html_select;
?>
Также измените HTML для вызова этого локального (вместо удаленного) script:
<iframe name='select_frame' src='select_local.php?initial_name=jim'></iframe>
<input type='button' name='save' value='SAVE'>
Теперь ваш браузер должен думать, что он загружает содержимое iFrame из того же домена.