在Firefox中,a href=javascript:function()无法正常工作。

7

我尝试在按钮中使用a href=javascript:function(),并附带一个要执行的函数。它在Chrome中可以工作,但在Firefox中无法工作。

Firefox不会弹出警报并打开空白选项卡。

有人能帮助我吗?

<script>
function verifyisbot() {
alert("test."); 
var win = window.open("http://yahoo.com", '_blank');
win.focus();
}
</script>

以下是按钮代码。
<div class="frb_textcenter">
<a  target="_blank" class="frb_button frb_round  frb_center frb_fullwidth" href="Javascript:verifyisbot();">
click here
</a>
</div>

更新

我应该补充说明,我正在使用WordPress中的实时编辑器(profitbuilder)生成页面和按钮。我没有可插入其他JavaScript onclick函数到按钮的区域。因此,我想到了通过“ahref”空字段在实时编辑器中输入JavaScript调用函数来启动该功能。

是否有任何方法可以通过ahref而不使用onclick事件使其工作?或者我可以在ahref字段中指定onclick函数吗?

抱歉,test()实际上是verifybot()函数,是打字错误。


1
为什么不使用onclick而不是href?这种方法在ie9中也存在一些问题。 - Isabel Inc
你尝试过全部小写的 javascript: 吗? - user663031
1
不要将JavaScript与HTML混合在一起。 <a id="verify" ... <script>window.onload = function () { document.getElementById('verify').addEventListener('click', test); };</script> - Heretic Monkey
嗨torazaburo,稍后我会尝试全部小写并更新。 - jeremyok
你不应该这样做。无论如何,HTML调用了verifyisbot,我不明白为什么你期望调用test - Oriol
显示剩余2条评论
3个回答

16

您可以仅使用href属性来实现目标:

<a href="javascript:void(verifyisbot())" class="frb_button frb_round frb_center frb_fullwidth">
  click here
</a>

它奏效的原因在于,当浏览器遵循一个 javascript: URI 时,它会评估该URI中的代码,并将页面的内容替换为返回值,除非返回值是undefined。可以使用void操作符返回undefined


4

使用onclick事件代替a href=javascript。它在Firefox上可行。请参见以下内容:

<div class="frb_textcenter">
<a target="_blank" class="frb_button frb_round  frb_center frb_fullwidth" onclick="test()">click here</a></div>

<script>
function test() {
  alert("test."); 
  var win = window.open("http://yahoo.com", '_blank');
  win.focus();
}
</script>

更新1:您可以不使用JavaScript完成此操作。只需将链接添加到href属性中即可。请参见以下内容:

<a target="_blank" class="frb_button frb_round  frb_center frb_fullwidth" href="http://yahoo.com">click here</a></div>

嗨,msantos,我正在使用实时编辑器,但似乎没有办法为按钮添加onclick标记。有什么办法可以使用ahref字段来触发警报并打开新选项卡吗? - jeremyok
是的,但我也想要警报功能。 它能通过ahref调用吗? - jeremyok
唯一的方法是通过 JavaScript 处理。看看 Mike McCaughan 的解决方案。 - msantos
我明白了,是的,我相信Mike的解决方案会起作用。不过,使用实时编辑器的问题在于它没有字段供我们输入或添加自定义ID到按钮中...这很烦人 :/ - jeremyok

0
认真考虑将JavaScript和HTML分开,以解决问题。例如,为锚点添加ID,并通过脚本添加事件处理程序:
<div class="frb_textcenter">
  <a id="verify" target="_blank" class="frb_button frb_round  frb_center frb_fullwidth" href="http://yahoo.com">
    click here
  </a>
</div>

稍后再说...

<script>
function test() {
  alert("test."); 
  var win = window.open("http://yahoo.com", '_blank');
  win.focus();
}
window.onload = function () { 
  document.getElementById('verify').addEventListener('click', test); 
};
</script>

请注意,使用提供的示例,您实际上根本不需要 JavaScript。HTML 本身将导致一个新的窗口/选项卡打开并加载 Yahoo!...

嗨Mike,谢谢你的代码。我相信你的代码可以使用ID名称,但问题是我正在使用的实时编辑器不允许我们输入ID名称或自定义HTML到他们生成的按钮中。这很烦人...有没有办法使用实时编辑器提供的ahref字段来触发函数或执行警报并打开新选项卡?如果可以的话,那将太棒了。 - jeremyok
@jeremyok 将 onload 改为使用 document.querySelector('[href="http://yahoo.com"]') 而不是 document.getElementById('verify'),假设 href 在文档中是唯一的。 - Heretic Monkey

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