使用 jquery 在 iframe 中捕获鼠标右键单击事件

Posted

技术标签:

【中文标题】使用 jquery 在 iframe 中捕获鼠标右键单击事件【英文标题】:Capture mouse right click event inside a iframe using jquery 【发布时间】:2012-06-28 16:59:39 【问题描述】:

我需要使用任何 javascript 或 jquery 代码在 asp.net 中的 iframe 内捕获鼠标右键单击事件。

以下是我目前尝试过的代码。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Detect IFrame Clicks</title>

<script type="text/javascript" language="javascript" src="JScript/jquery-1.7.1.js"></script>

<script type="text/javascript" language="javascript" src="JScript/jquery.ui.core.js"></script>

<script type="text/javascript" language="javascript" src="JScript/jquery.ui.widget.js"></script>

<script type="text/javascript" language="javascript" src="JScript/jquery.ui.mouse.js"></script>

<script type="text/javascript">        
    document.onmousedown = onMousebtClick
    var isOverIFrame = false;
    $(document).ready(function() 
        function processMouseOut() 
            isOverIFrame = false;
            top.focus();
        

        function processMouseOver() 
            isOverIFrame = true;
        

        function processIFrameClick() 
            if (isOverIFrame) 
                log("CLICK << detected. ");
                onMousebtClick();
            
        

        function log(message) 
            var console = document.getElementById("console");
            var text = console.value;
            text = text + message + "\n";
            console.value = text;
        

        function attachOnloadEvent(func, obj) 
            if (typeof window.addEventListener != 'undefined') 
                window.addEventListener('load', func, false);
             else if (typeof document.addEventListener != 'undefined') 
                document.addEventListener('load', func, false);
             else if (typeof window.attachEvent != 'undefined') 
                window.attachEvent('onload', func);
             else 
                if (typeof window.onload == 'function') 
                    var oldonload = onload;
                    window.onload = function() 
                        oldonload();
                        func();
                    ;
                 else 
                    window.onload = func;
                
            
        

        function init() 
            var element = document.getElementsByTagName("iframe");
            for (var i = 0; i < element.length; i++) 
                element[i].onmouseover = processMouseOver;
                element[i].onmouseout = processMouseOut;
            
            if (typeof window.attachEvent != 'undefined') 
                top.attachEvent('onblur', processIFrameClick);
            
            else if (typeof window.addEventListener != 'undefined') 
                top.addEventListener('blur', processIFrameClick, false);
            
        

        attachOnloadEvent(init);

    );

    function onMousebtClick() 
        switch (event.button) 
            case 1:
                alert("leftclick");
                break;

            case 2:
                alert("right click");
                break;
        
    
    /*document.onmousedown = onMousebtClick*/
</script>

</head>
<body id="mybody">
<iframe src="http://www.microsoft.com"   id="ifrm">
</iframe>
<br />
<br />
<form name="form" id="form" action="">
<textarea name="console" id="console" style="width: 300px; height: 300px;" cols=""
    rows=""></textarea>
<button name="clear" id="clear" type="reset">
    Clear</button>
</form>
</body>
</html>

我可以检测到 body 标记中的鼠标右键单击,但我无法检测到 iframe 内的鼠标右键单击事件。

谁能帮帮我。

【问题讨论】:

【参考方案1】:

嘿:这可能会有所帮助:

How Enable Right Click in IFRAME with JavaScript

http://forums.asp.net/p/1818670/5042726.aspx/1?Capture+mouse+right+click+event+inside+a+iframe+using+jquery+

恐怕这是不可能的。当你在 iframe 中时,你是 在第二个标签中......除非你拥有里面的东西 iframe 并能够将您的 Javascript 放在页面上 这是不可能的。对于许多安全性而言,iframe 非常有限 原因。

如果有人不这么认为,请告诉我,很高兴撤下这篇文章。

虽然试试这里提到的这个技巧:http://www.codingforums.com/archive/index.php/t-8824.html

这里http://forums.mozillazine.org/viewtopic.php?f=19&t=371334

干杯,

【讨论】:

我只在那个 asp.net 论坛网站上发布了这个问题。我必须需要一个想法来解决这个问题。很抱歉投了反对票。 @Neon 哈哈哈哈哈哈 :) 很酷,所以你得到了正确的答案吗?我会删除我的帖子,但让我知道这是否可能,没有黑客 :) 哦,你投了反对票,因为? ...感谢您的回复。我需要解决这个问题。如果您以后有任何想法,请回复此内容。 @Neon 我在上面粘贴了一个有用的链接尝试使用 context menu forums.mozillazine.org/viewtopic.php?f=19&t=371334 anyhoo 不值得投反对票, asp.net 不支持标签。你能建议任何其他方法吗?谢谢你的答复。在 asp.net 中是否有 iframe 的替代品? :)【参考方案2】:

如果iframe 内的页面可能在同一个域中。

同一域中的 IFrame 页面: http://fiddle.jshell.net/rathoreahsan/MNtw8/8/show/

查看演示: http://jsfiddle.net/rathoreahsan/gJtkW/

如果您像您一样访问iframe 内的其他域的页面,那么不建议这样做。

已编辑:请参阅下面给出的一些参考资料,希望对您有所帮助。

    the-iframe-cross-domain-policy-problem

    cross-domain-iframe-resizing

【讨论】:

正是我试图解释兄弟得到-1 :) ++1 无论如何都是你的,但是如果我可以请看上面的链接,javascript 注入在任何情况下都是不好的:) @Ahsan.. 感谢您的回复.. 我尝试了您的演示网址并实现了它。当我运行该程序时,它显示一条错误消息“Microsoft JScript 运行时错误:权限被拒绝”。为什么这个错误发生在我身上?请帮我解决。 :) 通常情况下,如果父级尝试控制不同域中的 iframe,您会收到此错误。 @AhsanRathod 感谢您的回复.. 我会看到并给您反馈。我还有另一个问题。当通过 iframe 在 asp 页面中加载 SWF 文件时,我们可以禁用右键单击它吗?

以上是关于使用 jquery 在 iframe 中捕获鼠标右键单击事件的主要内容,如果未能解决你的问题,请参考以下文章

在打开的cv c ++中单击鼠标右键时如何从视频中捕获图像

如何从 vue.js 捕获 Jquery 事件

使用jQuery防止元素“捕获”鼠标?

JS捕获鼠标右键菜单中的粘贴时间

iFrame / Javascript鼠标加速中的Javascript iPhone滚动效果

页面上 iframe 中的 jQuery 不起作用