PHP每次iframe中的链接更改时创建新变量

时间:2014-05-11 05:13:53

标签: php html iframe

我有一个基本的html表单页面,用户输入一个单词,然后提交到一个带有iframe的php页面,它在维基百科中搜索这个词,见下文:

<?php

$userEntered = $_POST["userEntered"];

echo
'<html xmlns="http://www.w3.org/1999/xhtml" lang="EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Full Page IFrame</title>
<style type="text/css">
html {overflow: auto;}
html, body, div, iframe {margin: 0px; padding: 0px; height: 100%; border: none;}
iframe {display: block; width: 100%; border: none; overflow-y: auto; overflow-x: hidden;}
</style>
</head>
<body>
<iframe id="tree" name="tree" src="http://en.wikipedia.org/wiki/' . $userEntered . '" frameborder="0" marginheight="0" marginwidth="0" width="100%" height="100%" scrolling="auto"></iframe>
</body>
</html>';
?>

我想知道每次用户点击维基百科页面上的链接时如何创建新变量。

即使您导航到iframe中的新wikipeia页面,$ userEntered变量似乎也保持不变。

2 个答案:

答案 0 :(得分:0)

这是你想要的(测试代码)

<?php
$userEntered = !empty($_POST["userEntered"])?$_POST["userEntered"]:'test';

echo
'<html xmlns="http://www.w3.org/1999/xhtml" lang="EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Full Page IFrame</title>
<style type="text/css">
html {overflow: auto;}
html, body, div, iframe {margin: 0px; padding: 0px; height: 100%; border: none;}
iframe {display: block; width: 100%; border: none; overflow-y: auto; overflow-x: hidden;}
</style>
</head>
<body>
<form method="POST" >
<input type="text" name="userEntered">
<input type="submit" name="submit">

</form>
<iframe id="tree" name="tree" src="http://en.wikipedia.org/wiki/' . $userEntered . '" frameborder="0" marginheight="0" marginwidth="0" width="100%" height="100%" scrolling="auto"></iframe>

</body>
</html>';

?>

答案 1 :(得分:0)

这是不可能的(除非您控制维基百科域名)。

您无法检索iframe的网址,这是一件好事。如果有可能,任何人都可以设置网页并从URL中检索敏感信息。

这是same origin policy

此外,PHP是一种服务器端语言,它只是生成页面并传递它,之后发生的事情不是PHP所关心的。使用javascript检测页面中的更改。

编辑:解决同源问题的解决方案

要在更改后将iframe的URL传递给PHP,您必须使用javascript获取并发送URL。

使用jQuery的简单示例:

$(function() {
    $('#tree').load(function() {
        var frameUrl = $('#tree').contents().get(0).location.href;
        $.post("backend.php", {url: frameUrl});
    });
});
<?php

// Make sure it exists and filter it if necessary.
$url = $_POST['url'];