2016-01-06 4 views
1

У меня есть две страницы, одна из которых выполняется в iframe на другой странице: test.php работает в check.php. Test.php должен функционировать как прокси-сервер, чтобы обойти кросс-происхождение. IFrame работает и дает правильные значения. Но когда я пытаюсь взять значение из id div на родительской странице, я получаю этот ответ: Uncaught SecurityError: заблокирован кадр с источником «http://localhost» от доступа к кадру с источником «http://www.allow-any-origin.appspot.com». Протоколы, домены и порты должны совпадать.Получить значение div из iframe

Вот код, у меня есть:

check.php

<iframe id="vd" src="http://localhost/vd/test.php/test.php" width="720"  
    height="300" frameborder="0" scrolling="no" allowtransparency="true"> 
    </iframe> 
    <form> 
    <input id="test" type="button" value="Submit"> 
    </form> 

    <script type="text/javascript"> 
    jQuery('#test').click(function() { 
    var mb = 
    document.getElementById('vd').contentWindow.document.getElementById 
    ('#saldo_result'); 
    });   
    </script> 

test.php

<form action="http://www.allow-any- 
    origin.appspot.com/http://vend.giftcardservices.nl/saldo/check? 
    show_form=0&card_id=3005&card_id=&ajax=1" method="GET"> 
    <input type="text" name="card_id" value="3005"> 
    <input type="text" name="card_id" value=""> 
    <br> 
    <input type="submit" value="Submit"> 

Я предположил, этот путь был иметь браузер принять этот путь. Кто-нибудь может увидеть, где я ошибаюсь?

+0

Если этот сайт устанавливает CORS, используйте Ajax. Если вы не создаете прокси-сервер в своем домене для его получения. – epascarello

+0

Вот что я понял, что сделал так. – user3069332

ответ

0

Я сделал что-то вроде этой публикации с php.

клиент < -> yourPostScript.php < -> внешняя страница.

Форма данных сообщения на вашPostScript.php, что сообщения на внешний allow-any-origin.appspot.com вы получаете ответ в yourPostScript.php, и вы эхо его.

К сожалению, я надеюсь, что это не ilegal ..

--Edit--

test.php код:

<form action="yourPostScript.php" method="GET"> 
<input type="text" name="card_id" value="3005"> 
<input type="text" name="card_id" value=""> 
<br> 
<input type="submit" value="Submit"> 

yourPostScript.php код: (только фрагмент кода, который должен работа для демонстрации)

<?php 
/* validating method and fields i think is enough for ignoring images and others..*/ 
    if($_SERVER['REQUEST_METHOD']!='POST') die; 
    if(!$_POST['card_id']) die; 

    $url = 'http://vend.giftcardservices.nl/saldo/check? 
    show_form=0&card_id=3005&card_id=&ajax=1'; 
    $data = array('card_id' => $_POST['card_id'], 'other_field' => $_POST['other_field']); 

// use key 'http' even if you send the request to https://... 
$options = array(
    'http' => array(
     'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
     'method' => 'POST', 
     'content' => http_build_query($data), 
    ), 
); 
$context = stream_context_create($options); 
echo $result = file_get_contents($url, false, $context); ?> 
+0

Таким образом, ответ на сообщение по-прежнему ваш сайт и вы можете получить к нему доступ. – user3100334

+0

Вы можете публиковать сообщения на любом веб-сайте, который вы хотите. Это не является незаконным, если оно не используется для злонамеренных намерений. Если владельцы сайтов не хотели, чтобы это произошло, они смотрели на заголовки и блокировали это на стороне сервера. И, в этом отношении, многие API работают таким образом, создавая контент из поля запроса POST или GET. – Zak

+0

Разве это не то, что я сделал, используя test.php между ними? Или я не понимаю вы? – user3069332

2

JavaScript не достигнет кадров ... Стандарты для JS установлены довольно высокими. Таким образом, я не просто обслуживаю чужую страницу как iFrame и использую свой JavaScript для сбора регистрационных данных и т. Д. И т. Д. И т. Д.

+0

Ну, это просто взять одно числовое значение вывода и уметь рассчитывать с ним. Нет никаких плохих намерений быть уверенными. – user3069332

+0

Плохие намерения или нет. Если бы это было «разрешено», это была бы дыра в безопасности, которую любой мог использовать. Ваши намерения не под вопросом. Это невозможно по соображениям безопасности. – Zak

+0

Ahh, ясно. Так что вообще нет способа сделать это? – user3069332

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