在网上找不到任何特殊情况,所以我去... 我需要在浏览“second.com”时设置/获取存储在“first.com”的cookie,我可以完全访问“first.com”但我只能访问javascript(可以操作我想要的DOM)“ second.com”。
我的第一个方法是在second.com上创建一个iframe(使用js)加载一个像“first.com/doAjax?setCookie=xxx”这样的页面并且执行ajax调用以说“first.com/setCookie? cookieData = xxx“这将使用我们传递的数据在”first.com“上设置cookie。
在first.com上设置第二个网站上的cookie非常合适 - 为了获得一个cookie我基本上遵循相同的程序,创建了加载“first.com/doAjax?getCookie”的iframe,这样做ajax调用说“first.com/getCookie”,它将读取first.com上的cookie信息并将其作为JSON对象返回。
问题是我无法将该JSON cookie对象带回“second.com”,所以我可以阅读它,也许我可以在使用“window.top”完成Ajax调用时带它有时间问题,因为它与iframe加载时无关。我希望我很清楚,并且想知道是否有一个更容易的解决方案,而不是这个疯狂的iframe-> ajax垃圾,似乎这甚至不能用于在SAFARI中获取cookie。
答案 0 :(得分:9)
您可以使用回调将脚本元素注入到文档的HEAD中,该回调将您需要的cookie传递给任何需要它的函数。
类似的东西:
<script type="text/javascript">
var newfile=document.createElement('script');
newfile.setAttribute("type","text/javascript");
newfile.setAttribute("src", 'http://first.com/doAjax?getCookie&callback=passCookie');
document.getElementsByTagName("head")[0].appendChild(newfile);
</script>
页面first.com/doAjax?getCookie可以这样做:
passCookie({'name':'mycookie', 'value':'myvalue'});
答案 1 :(得分:0)
将此PHP文件放入first.com:
//readcookie.php
echo $_COOKIE['cookiename'];
在second.com上,您可以使用此javascript获取值:
function readCookieCallback()
{
if ((this.readyState == 4) && (this.status == 200))
{
alert("the value of the cookie is: "+this.responseText);
}
else if ((this.readyState == 4) && (this.status != 200))
{
//error...
}
}
function buttonClickOrAnything()
{
var refreshObject = new XMLHttpRequest();
if (!refreshObject)
{
//IE6 or older
try
{
refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
return;
}
}
}
refreshObject.onreadystatechange = readCookieCallback;
refreshObject.open("GET", "http://www.first.com/readcookie.php");
refreshObject.send();
}
此致 罗伯特
答案 2 :(得分:-2)
对于SETTING cookies,您可以按如下方式更改我的脚本:
新的PHP脚本:
//writecookie.php
setcookie($_GET['c'], $_GET['v']);
JavaScript:
function buttonClickOrAnything()
{
var refreshObject = new XMLHttpRequest();
if (!refreshObject)
{
//IE6 or older
try
{
refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
return;
}
}
}
refreshObject.open("GET", "http://www.first.com/writecookie.php?c=cookiename&v=cookievalue");
refreshObject.send();
}
这适用于所有浏览器。