从 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 值的主要内容,如果未能解决你的问题,请参考以下文章