捕获“在新标签页中打开链接”和“在新窗口中打开链接”的事件

10

这是我的代码

<a href="javascript:void(0)" onclick="myFun('www.google.com');" onmousedown="myFun('www.google.com');">
每当我点击这个链接时,我的函数就会使用onclick事件被调用。我添加了onmousedown事件来捕获鼠标右键单击。但问题是,这个函数在选择“在新标签页中打开”或“在新窗口中打开”的选项之前就被调用了。当用户使用右键单击并在选择右键菜单选项之前,即可触发该函数。我不想要这种行为。我希望只有在用户实际选择“在新标签页中打开链接”或“在新窗口中打开链接”选项时才调用此函数。 我不想在状态栏中显示链接,并且也不希望允许用户复制链接地址。这就是我使用onclick和onmousedown事件的原因。 请帮帮我。谢谢。

这些是浏览器事件,而不是网页事件。 - Cruiser
没有任何东西告诉你用户选择了哪些。 - epascarello
我不能只使用oncontextmenu事件。如果这样做,它会给我一个异常-JSPG0227E:在翻译/abc.jsp时捕获异常:/abc.jsp(160,10)->JSPG0123E:无法为标签属性oncontextmenu定位标签属性信息 - Nitesh
3个回答

0
你遇到的问题是右键和左键都使用onclick函数处理。另一种可能性是使用oncontextmenu(如此处所述)。
但我认为你需要分别处理右键和左键,所以onclick是正确的事件,只需在那里检查它是主要(0)还是次要(2)鼠标按钮(参见此处)。因此,你的解决方案可能是这样的:
myFun(link) {
    var buttonPressed = instanceOfMouseEvent.button;
    if (buttonPressed == 0) {
         //Handle normal click
    } else if (buttonPressed == 2) {
         //Handle right click 
    }
}

我可以找到正确的右键单击事件。但是我想找到用户实际选择“在新标签页中打开”或“在新窗口中打开”选项时的事件。我的函数在选择这些选项之前就被触发了。因为我的代码能够找到右键单击事件,而我不想要它。我的函数应该在选择选项后触发。 - Nitesh
1
@NiteshAarne 你可能需要研究一下构建自己的右键菜单。这样你可以更好地控制发生的情况。 - freginold
在我的例子中,我想要发送要打开的链接。我的做法是将该链接传递给一个JS函数,并使用JS创建一个表单。然后使用form.submit()提交表单。我的URL包含一些参数,我不想在地址栏中显示。我正在创建表单并提交它以进行POST请求。 - Nitesh
我无法只使用oncontextmenu事件。如果这样做,它会给我一个异常-JSPG0227E: 在转换/abc.jsp时捕获异常: /abc.jsp(160,10) --> JSPG0123E:无法找到标签属性oncontextmenu的标签属性信息。 - Nitesh
@NiteshAarne,正如freginold所说,构建自己的上下文菜单是最好的方式。因为这样你可以使用自己的函数,并且不必担心控制用户的选择。 - EagleT
@eagleT:我认为这不是正确的实现方式。因为用户可能想执行除“在新标签页中打开链接”或“在新窗口中打开链接”之外的其他操作。我无法添加浏览器通常提供的所有选项。用户在看到我们定制的选项后不应感到困惑。简而言之,我无法自定义它。 - Nitesh

0
改变

onmousedown="myFun('www.google.com');"

oncontextmenu="handleContextMenu('www.google.com');"

将此代码添加到JS中:
 function handleContextMenu(link) {
        // Prevent the default right-click behavior
        event.preventDefault();

        // Show a confirmation dialog or perform any other action
        if (window.confirm('Do you want to open the link in a new tab?')) {
            // Call your function if the user chooses to open in a new tab
            myFun(link);
        }else {
            window.location.href = link;
        }
    }

    function myFun(link) {
        // Do something with the link, for example, open it in a new tab/window
        window.open(link, '_blank');
    }

-1

听起来你正在寻找这样一个东西,它可以在上下文菜单启动时改变链接:

function myFun2(url) {
   linkEl.href = url;
}

然后给 a 元素分配一个 ID(例如 "linkEl"),移除 onmousedown 处理程序,并分配一个 oncontextmenu 处理程序,如下所示:

oncontextmenu="myFun2('www.google.com');"

当上下文菜单被启动时,链接会发生变化。因此,如果选择了“在新标签页中打开”或“在新窗口中打开”,它将跳转到谷歌(以本例为例),而不是之前设置的链接。

在我的例子中,我想要发送要打开的链接。我的做法是将该链接传递给一个JS函数,并使用JS创建一个表单。然后使用form.submit()提交表单。 我的URL包含一些参数,我不想在地址栏中显示它们。我正在创建表单并提交POST请求。 - Nitesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接