检测用户是不是点击了弹出窗口中的元素
Posted
技术标签:
【中文标题】检测用户是不是点击了弹出窗口中的元素【英文标题】:Detect if user has clicked element inside popup检测用户是否点击了弹出窗口中的元素 【发布时间】:2016-12-12 01:57:57 【问题描述】:是否可以检查用户是否点击了弹出窗口中的元素?我目前使用此 javascript 打开一个弹出窗口并检测它是否已关闭。
var win = window.open(url,'','height=500,width=800');
var winTimer = window.setInterval(function()
if (win.closed == true)
clearInterval(winTimer);
, 2000);
例如,我在弹出窗口中打开 YouTube,我想检测用户是否点击了“喜欢”按钮。如何检测间隔内的元素点击并在检测到后关闭弹出窗口?
【问题讨论】:
Is it possible to detect the user click event in the popup window?的可能重复 【参考方案1】:不幸的是,除非该域与您的站点托管在同一个域中,否则您将遇到cross-domain security 问题。你试图完成的事情(通过 youtube)在这种情况下将无法工作,除非他们有一个允许这样做的隐式 api(参见Window.postMessage()
)。
来自wikipedia page for the Same-origin_policy:
有这个限制的主要原因是因为没有同源策略会有安全风险。假设用户正在访问银行网站并且没有注销。然后他随机访问任何其他站点,该站点在后台运行一些恶意 JavaScript 代码,该代码从银行站点请求数据。由于用户仍在银行网站上登录,该恶意代码可以在银行网站上做任何事情。例如,获取您上次交易的列表、创建新交易等。这是因为浏览器可以根据银行网站的域向银行网站发送和接收会话 cookie。访问该恶意站点的用户会期望他正在访问的站点无法访问银行会话 cookie。虽然这是真的,但 JavaScript 无法直接访问银行会话 cookie,但它仍然可以使用银行站点的会话 cookie 向银行站点发送和接收请求,基本上充当银行站点的普通用户。关于新交易的发送,即使是银行网站的 CSRF 保护也没有效果,因为脚本可以简单地做与用户一样的事情。因此,对于您使用会话和/或需要登录的所有站点来说,这是一个问题。如果示例中的银行站点(或任何其他站点)仅提供公共数据并且您无法触发任何内容,那么通常没有同源政策可以防范的危险。另外,如果这两个站点在同一方的控制下或完全信任对方,那么也可能没有危险。
【讨论】:
感谢您的信息!好吧,我想我可以使用 iframe 而不是弹出窗口正确吗? iframe 也使用相同的来源策略。你可以看一下here,但是正如你从第二条评论中看到的那样,你也会遇到 iframe 的这个问题以上是关于检测用户是不是点击了弹出窗口中的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何切换到模态弹出窗口并使用Telerik中的编码步骤识别其中的元素