window.open 在新标签的 a 标签上

zul*_*luk -2 html javascript hyperlink window.open

我正在使用此代码打开一个新选项卡:

<a href="javascript:window.open('https://example.com','_blank')">linktext</a>
Run Code Online (Sandbox Code Playgroud)

新页面也会在新选项卡中加载,但在源页面上显示的是新页面[object]而不是链接。怎么了?

我不想使用

<a href="https://example.com" target="_blank")">linktext</a>
Run Code Online (Sandbox Code Playgroud)

因为我生成了一个链接列表,并且每个链接的目标页面调用方式都不同。对我来说最灵活的方法是使用给定语法。

编辑:这是生成的链接列表:

<a href="javascript:window.open('https://example.com','_blank')">linktext 1</a>
<a href="javascript:jsfunc1(param1)">linktext 2</a>
<a href="javascript:jsfunc2(param2,param3)">linktext 3</a>
Run Code Online (Sandbox Code Playgroud)

href 属性已生成。我从桌子上拿了一个。

Que*_*tin 5

方案 URL的要点javascript:从 JavaScript 生成替换页面。它的设计目的不是运行 JavaScript 来响应客户端,同时让页面保持独立 \xe2\x80\x94,而这正是事件处理程序的用途。

\n\n

您看到的新“页面”是将新窗口的引用转换为字符串的结果。

\n\n

最好不要使用 JavaScript 来避免这种情况:

\n\n
<a href="https://example.com" target=\'_blank\'>linktext</a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以通过避免使用javascript:方案 URI 并单独绑定 JS(在 href 中使用合理的回退)来实现此目的:

\n\n
<a href="https://example.com">linktext</a>\n\n<script>\n    document.querySelector("a").addEventListener("click", your_function);\n    function your_function(evt) {\n        evt.preventDefault();\n        // Then do whatever else you want the function to do\n    }\n</script>\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您确实想使用 JavaScript URL 方案(正如我上面所建议的,这是一个肮脏的黑客),您可以使用运算符确保脚本不返回任何内容void

\n\n
<a href="javascript:void (window.open(\'https://example.com\',\'_blank\'))">linktext</a>\n
Run Code Online (Sandbox Code Playgroud)\n