用href执行函数

时间:2014-07-17 13:14:24

标签: javascript href greasemonkey

我正在寻找通过href加载函数的解决方案。 href=javascript:myFunction()不起作用。

我无法使用onClick或eventListener的原因是因为我希望鼠标中键打开我从新功能选项中获得的链接。

我无法直接输入最终链接,因为我需要先收集链接,而且我只想在使用href时才这样做。

这可能吗?

PS:这是关于篡改/ Greasemonkey脚本

4 个答案:

答案 0 :(得分:2)

不确定为什么你不能让它工作,这很好。

确保在元素之前定义了您的函数。例如,在<head>中。

http://jsfiddle.net/5EJuu/

HTML

<a href="javascript:test();">Test</a>

JS

function test() {
    alert("executed");
    return false;
}

如果您在使用Greasemonkey准备好dom后,这里有一个可以使用的工作。您仍然需要能够在元素之前定义某些内容,而不是方法。

基本上,如果在元素之前创建名称空间,则可以在加载文档后将方法添加到该名称空间,并且元素仍然有效。

http://jsfiddle.net/5EJuu/2/

HTML

<a href="javascript:test.foo();">Test</a>

JS

// jsfiddle load this in the head
var test = {};

// jquery used to run on dom ready
$(function() {

    // add the method use by the element
    test.foo = function() {
        alert("executed");
        return false;
    }
});

答案 1 :(得分:1)

您可以将函数名称存储在任何属性中,然后在onclick处理程序中调用它。

E.g。如果你想用中间点击jquery完成这个,你可以这样做:

HTML:

<a id='link' href='func' >link</a>

JS:

$("#link").on('click', function(e) { 
    if( e.which == 2 ) {
        e.preventDefault();
        if (typeof window[$(this).attr('href')] === "function")
            window[$(this).attr('href')]();
    }
});

function func(){
    alert('func called');
}

在带有addEventListener的普通js中,您可以通过e.button检查中间鼠标,如下所示:

document.getElementById('link').addEventListener("click", function(e){
if(e.button == 1){
  e.preventDefault();

  if (typeof window[this.getAttribute("href")]  === "function")
            window[this.getAttribute("href")]();
}
});

答案 2 :(得分:0)

如果您需要在页面加载后

HTML

<a href="javascript:hello('Hello');" >link</a>

JS

hello = function(value)
{
    console.log(value)
}

http://jsfiddle.net/Nnb2j/

答案 3 :(得分:0)

我找到了解决方案,使用GreaseMonkeys // @run-at document-start函数可以实际执行GM BEFORE页面加载。 http://wiki.greasespot.net/Metadata_Block#.40run-at

因此我能够定义函数并轻松替换href。

度过愉快的一天