是否可以检查用户是否单击了弹出窗口中的元素?我目前使用此JavaScript打开弹出窗口并检测它是否已关闭。
var win = window.open(url,'','height=500,width=800');
var winTimer = window.setInterval(function()
{
if (win.closed == true) {
clearInterval(winTimer);
}
}, 2000);
例如,我在弹出窗口中打开YouTube,我想检测用户是否点击了“喜欢”按钮。如何在我的间隔内检测到元素点击并在检测到后关闭弹出窗口?
答案 0 :(得分:1)
很遗憾,除非该域名与您的网站托管在同一个域中,否则您将遇到cross-domain security问题。您尝试完成的任务(通过youtube)在这种情况下不起作用,除非他们有一个隐含的api允许这样做(见Window.postMessage()
)。
来自wikipedia page for the Same-origin_policy:
有这种限制的主要原因是因为没有同源政策会存在安全风险。假设用户正在访问银行网站并且没有注销。然后他去任何随机的其他网站,该网站有一些恶意的JavaScript代码在后台运行,从银行网站请求数据。由于用户仍在银行网站上登录,因此该恶意代码可以在银行网站上执行任何操作。例如,获取您上次交易的列表,创建新交易等。这是因为浏览器可以根据银行网站的域向银行网站发送和接收会话cookie。访问该恶意站点的用户将期望他正在访问的站点无法访问银行会话cookie。虽然这是真的,但JavaScript无法直接访问银行会话cookie,但它仍然可以通过银行网站的会话cookie向银行网站发送和接收请求,基本上充当银行网站的普通用户。关于发送新交易,银行网站甚至CSRF保护都没有效果,因为脚本可以像用户那样做。因此,这是您使用会话和/或需要登录的所有站点的问题。如果示例(或任何其他站点)的银行站点仅显示公共数据而您无法触发任何内容,那么通常没有同源政策可以防范的危险。此外,如果这两个网站完全由同一方控制或相互信任,那么也可能没有危险。