【问题标题】:Capture mouse right click event inside a iframe using jquery使用 jquery 在 iframe 中捕获鼠标右键单击事件
【发布时间】: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" width="800px" height="300px" 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 内的鼠标右键单击事件。

谁能帮帮我。

【问题讨论】:

    标签: javascript jquery asp.net 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 内的其他域的页面,那么不建议这样做。

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

    1. the-iframe-cross-domain-policy-problem

    2. cross-domain-iframe-resizing

    【讨论】:

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