首页 > WEB开发 > 利用动态js解决跨域传值问题

利用动态js解决跨域传值问题

2007年3月1日 wgzhao 发表评论 阅读评论

由于JavaScript的“同源策略”以及浏览器基于安全的考虑,跨域访问成为Ajax应用的一个难题。
不仅仅是在不同域的网页之间传值存在问题,就是用iframe来框住一个页面,只要这个页面的域和父页面不同,访问iframe的内容也是不可能的。

今日因为工作的需要,要想办法能在再两个不同的域之间传递数据。Google了一下,找到了一个简单的办法,那就是采用调用js脚本的方式,因为访问不同域的js脚本是不存在跨域访问的问题的。说的再多,不如代码详细,下面贴出代码。
假定A域的网页a.html的内容如下:
[codes=html]
<html>
<head>
<title>vnet search simulation</title>
<script type="text/javascript">
var lastScript;
var h=document.getElementsByTagName("head")[0];

function loadScript(url){
var f=document.createElement("script");
f.type="text/javascript";
f.src= url;
h.appendChild(f);
if(lastScript&&g(lastScript))
g(lastScript).parentNode.removeChild(g(lastScript));

}

function g(x)
{return document.getElementById(x);};

</script>
</head>

<body>
<input name="url" id="url" type="text" value="" />
<script type="text/javascript">
loadScript('http://www.B.com/b.php');
</script>  
</body>
</html>
[/codes]
上面代码的核心思想是动态创建一个script元素,然后指定另外一个域的页面,这个页面可以是js文件,可以是html页面,也可以动态页面,比如php。只是该页面的输出的内容必须是js脚本。具体看b.php
[codes=php]
<?php
//随机抽取一个记录
include_once("db.inc.php");
$rndsql="select *
from links as r1 join
(select round(rand() *
(select max(id)
from links)) as id2)
as r2
where r1.id >= r2.id2
order by r1.id asc
limit 1;";
$rs=mysql_query($rndsql) or die(mysql_error());
$row=mysql_fetch_array($rs);
if ($row)
{
$url=urldecode($row['url']);
echo "g('url').value='$url';";
}

?>
[/codes]
上面的php代码是从数据表中随机抽取一条记录,得到字段url的值,并填充到A域的网页a.html的输入框元素url中。这样就完成了将B域的值传到了A域。

当然这个方法需要A,B两个域的配合。所以你没有办法用这个方法来获取google搜索结果的值。

原创文章,转载请注明: 转载自Linux|系统管理|WEB开发

本文链接地址: 利用动态js解决跨域传值问题

分类: WEB开发 标签: , ,
  1. 阅读(438)
    2007年5月7日11:54 | #1

    puke

    回复回复
  1. 本文目前尚无任何 trackbacks 和 pingbacks.