这个问题是我在thread上提出的问题的更具体描述。基本上,我有一个Web应用程序,我试图使用Twitter的OAuth功能。此应用程序有一个链接,提示用户提供他们的Twitter凭据。当用户单击此链接时,将通过JavaScript打开一个新窗口。该窗口用作对话框。当用户单击该链接时,它们将被重定向到对话框中的Twitter站点。在Twitter网站上,用户可以选择输入他们的Twitter凭据。当他们提供了凭据时,会将其重定向回对话框中我网站上的页面。这是通过一个回调网址完成的,可以为Twitter网站上的应用程序设置。
我要做的就是阅读我打开的窗口的URL。我正在尝试读取URL以检测更改,以便我可以做出相应的反应并在启动页面上写入HTML DOM。但是,每当我尝试读取对话窗口的URL时,都会收到“权限被拒绝”错误。为了隔离并重新创建问题,我创建了以下测试来显示问题。
<html>
<body>
<input type="button" value="test" onclick="startTest();" />
<script type="text/javascript">
var dwin = null;
var timeoutID = 0;
function startTest()
{
dwin = window.open("http://www.google.com", "dialog", "height=600,width=800", true);
timeoutID = setTimeout("timerElapsed()", 1000);
}
function timerElapsed()
{
if (timeoutID == 5)
{
clearTimeout(timeoutID);
alert("We're done!");
}
else
{
if (dwin != null)
{
alert(dwin.location);
}
timeoutID = setTimeout("timerElapsed()", 1000);
}
}
</script>
</body>
</html>
我如何获得dwin.location?我真的很困惑。我认为这不会那么困难。
感谢您提供任何帮助。
答案 0 :(得分:1)
简短的回答是,除非你修改策略,否则你将无法做到。
原因很简单,您已经打开了一个新的浏览器窗口。用户可以关注远离您网站的链接,浏览器可能会违反隐私权,让您知道他们所在的网站。如果网址不是来自您的网站,则网址本身就是私人信息。
解决这个问题的方法是,如果窗口弹出窗口是您的站点,则该窗口中的代码可以将子窗口的当前位置发回父窗口。
答案 1 :(得分:1)
不是你问题的答案,但是:
你有没有办法避免使用弹出窗口?
几天前,我看到这篇关于Twitter和OAuth的博文:Writing A Simple Twitter Client Using the PHP Zend Framework's OAuth Library (Zend_Oauth)
即使您没有使用Zend Framework也不使用PHP,该帖子显示可以使用OAuth在Twitter上进行身份验证,而无需使用弹出窗口: - )
为什么不让用户在点击链接时重定向到Twitter 的认证页面(在当前浏览器的窗口内)?当他们完成身份验证后让他们回到网站上?使用twitter的API可能有办法做到这一点?
实际上,似乎有可能(引用你的另一个问题):
在Twitter网站上,用户拥有 选择进入他们的Twitter 证书。当他们提供 他们的凭据,他们被重定向 回到我的网站。这是完成的 通过回调网址可以 为Twitter上的应用程序设置 站点。
您担心用户不会回来的问题是什么?
嗯,如果他们点击这个链接,可能是因为他们想在你的网站上做点什么,不是吗?所以,他们可能会回来!
也许你可以在链接旁边做一个解释,解释它的作用和方式;这可能会帮助他们知道发送到twitter的身份验证页面是正常的; - )
答案 2 :(得分:0)
您无法访问已打开的窗口URL,因为所有浏览器都禁止跨域访问。所以你需要考虑另一种方法。