从iframe

时间:2016-01-06 21:05:51

标签: javascript jquery iframe cross-domain reverse-proxy

我有两个页面,一个在另一个页面的iframe中运行:test.php在check.php中运行。 Test.php用作代理以避免交叉起源。 iframe可以工作并提供正确的值。但是当我尝试从父页面中的div id获取值时,我得到了这样的响应: 未捕获的SecurityError:阻止了一个包含起源的框架" http://localhost"从访问带有起源的框架" http://www.allow-any-origin.appspot.com"。协议,域和端口必须匹配。

这是我的代码:

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">

我认为这条路径是让浏览器接受这种方式。谁能看到我哪里错了?

2 个答案:

答案 0 :(得分:2)

JavaScript不会进入框架...... JS的标准设置得非常高。这样我不只是将别人的页面作为iFrame提供,并使用我的JavaScript收集登录详细信息等等。

答案 1 :(得分:0)

我做了类似于从php发布的内容。

客户&lt; - &gt; yourPostScript.php&lt; - &gt;外部网页。

将帖子数据发布到yourPostScript.php,发布到外部allow-any-origin.appspot.com,您可以在yourPostScript.php中获得响应,然后回复它。

抱歉,我希望这不是非法......

- 编辑 -

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); ?>