从 iframe 中获取 div 值

Posted

技术标签:

【中文标题】从 iframe 中获取 div 值【英文标题】:Get a div value from an iframe 【发布时间】:2016-04-11 02:39:11 【问题描述】:

我有两个页面,一个在另一个页面的 iframe 中运行:test.php 在 check.php 中运行。 Test.php 的作用是作为一个代理来规避跨域。 iframe 工作并提供正确的值。但是当我尝试从父页面中的 div id 中获取一个值时,我得到了这个响应: 未捕获的安全错误:阻止了来源为“http://localhost”的框架访问来源为“http://www.allow-any-origin.appspot.com”的框架。协议、域和端口必须匹配。

这是我的代码:

检查.php

    <iframe id="vd" src="http://localhost/vd/test.php/test.php"        
     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">

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

【问题讨论】:

如果该站点正在设置 CORS,请使用 Ajax。如果不在您的域上创建一个代理来获取它。 我想我就是这样做的。 【参考方案1】:

JavaScript 不会进入框架……JS 的标准是这样设置的。这样我就不只是将其他人的页面作为 iFrame 提供服务,并使用我的 JavaScript 来收集登录详细信息等等等等..

【讨论】:

好吧,它只是取一个数值输出值并能够用它计算。确定没有恶意。 是否有恶意......如果它被“允许”,那将是一个任何人都可以利用的安全漏洞。你的意图是没有问题的。出于安全原因,这是不可能的。 很抱歉,没有:-( 无论如何都不用 JS .. 如果你想完成,你必须在服务器端做这个 .. 无赖。感谢您的快速回复!【参考方案2】:

我从 php 发布了类似的帖子。

客户端 yourPostScript.php 外部网页。

表单将数据发布到 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 代码:(只是一个适用于演示的 sn-p)

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

【讨论】:

这样,帖子回复仍然是您的网站,您可以访问它。 您可以发布到您想要的任何网站.. 除非用于恶意目的,否则这不是非法的。如果站点所有者不希望它发生,他们会查看标题并将其锁定在服务器端。而且,就此而言,许多 API 以这种方式工作,从跨域的 POST 或 GET 请求生成内容。 这不是我在两者之间使用 test.php 所做的吗?还是我误会了你? 感谢您的回复!在我的测试中,这只是一个白页。 我对您的代码进行了一些调整,并且成功了。非常感谢!

以上是关于从 iframe 中获取 div 值的主要内容,如果未能解决你的问题,请参考以下文章

JS 获取iframe中的div高度

如何从 iframe 源获取 jstree 实例?

如何用js控制iframe里body的背景属性

从其子 IFRAME 中删除一个 DIV(跨域)

无法在插入的 iframe 中获取元素?

Jquery 获取iframe 中元素并设置CSS问题