Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将onClick应用于Iframe_Javascript_Html_Iframe - Fatal编程技术网

Javascript 将onClick应用于Iframe

Javascript 将onClick应用于Iframe,javascript,html,iframe,Javascript,Html,Iframe,有没有办法用其他元素“封装”Iframe来模拟onClick?我知道Iframe不支持事件,但我需要跟踪通过Iframe离开的网站的点击 谢谢 如果框架包含来自同一域的页面(不违反),则可以直接与其文档交互: <script type="text/javascript"> window.onload = function() { var oFrame = document.getElementById("myframe"); oFrame.contentWindow.

有没有办法用其他元素“封装”Iframe来模拟onClick?我知道Iframe不支持事件,但我需要跟踪通过Iframe离开的网站的点击


谢谢

如果框架包含来自同一域的页面(不违反),则可以直接与其文档交互:

<script type="text/javascript">
window.onload = function() {
    var oFrame = document.getElementById("myframe");
    oFrame.contentWindow.document.onclick = function() {
        alert("frame contents clicked");
    };
};
</script>

window.onload=函数(){
var of name=document.getElementById(“myframe”);
OfName.contentWindow.document.onclick=函数(){
警报(“单击了框架内容”);
};
};

若它包含外部页面,那个么你们就走运了——出于明显的安全原因,并没有办法做你们想做的事情。尽管所有内容在视觉上都是同一页面的一部分,但来自不同域的框架在脚本编写方面必须保持独立。否则,任何页面都可能创建一个隐藏的iframe来加载您的Web邮件,并从中窃取您的会话cookie。用户可以访问所有数据,但页面作者不应访问这些数据。

上述脚本对于测试iframe中的单击功能非常有用。更具体地说,如果您使用Google较新的跟踪代码和事件跟踪来跟踪iframe中的点击,则上述代码如下所示:

<script type="text/javascript">
window.onload = function() {
    var oFrame = document.getElementById("myframe");
    oFrame.contentWindow.document.onclick = function() {
        ga('send', 'event', 'link', 'click', 'My Frame Was Clicked');
    };
};
</script>

window.onload=函数(){
var of name=document.getElementById(“myframe”);
OfName.contentWindow.document.onclick=函数(){
ga(‘发送’、‘事件’、‘链接’、‘点击’、‘我的框架被点击’);
};
};
iframe可能如下所示(注意,javascript中引用了id=“myframe”):


然后,为了测试事件单击,如果您熟悉Google的事件跟踪,在Google Analytics Dashboard的标准报告>实时>事件下,单击将显示为事件操作:单击,事件标签:我的框架被单击。或者在“行为”>“事件”下的仪表板中选择“长期”

我已经对此进行了测试,如前一张海报所示,只有当iframe源位于同一个域上时,这才有效。

尝试使用:

由于同源策略,无法从父页面读取iframe内容(DOM),因此跟踪基于与页面/iframe边界监控系统关联的模糊事件,该系统随时告知哪个iframe是鼠标光标

使用jQuery选择器匹配要跟踪的iframe元素,并使用回调函数调用iframeTracker,当检测到单击iframe时,将调用该回调函数:

jQuery(document).ready(function($){
    $('.iframe_wrap iframe').iframeTracker({
        blurCallback: function(){
            // Do something when the iframe is clicked (like firing an XHR request)
        }
    });
});

还有更多选择。

为什么这是安全原因?内容显示在我的页面上。@GateKeeper将显示内容,但如果它位于另一个域上,脚本将无法访问内容。@GateKeeper看不到比这更好的解释。但从技术上讲,Iframe上的内容不在我的页面上吗?@GateKeeper是的,但浏览器阻止您访问它
jQuery(document).ready(function($){
    $('.iframe_wrap iframe').iframeTracker({
        blurCallback: function(){
            // Do something when the iframe is clicked (like firing an XHR request)
        }
    });
});