我正在寻找通过href加载函数的解决方案。 href=javascript:myFunction()
不起作用。
我无法使用onClick或eventListener的原因是因为我希望鼠标中键打开我从新功能选项中获得的链接。
我无法直接输入最终链接,因为我需要先收集链接,而且我只想在使用href时才这样做。
这可能吗?
PS:这是关于篡改/ Greasemonkey脚本
答案 0 :(得分:2)
不确定为什么你不能让它工作,这很好。
确保在元素之前定义了您的函数。例如,在<head>
中。
HTML
<a href="javascript:test();">Test</a>
JS
function test() {
alert("executed");
return false;
}
如果您在使用Greasemonkey准备好dom后,这里有一个可以使用的工作。您仍然需要能够在元素之前定义某些内容,而不是方法。
基本上,如果在元素之前创建名称空间,则可以在加载文档后将方法添加到该名称空间,并且元素仍然有效。
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)
}
答案 3 :(得分:0)
我找到了解决方案,使用GreaseMonkeys // @run-at document-start
函数可以实际执行GM BEFORE页面加载。
http://wiki.greasespot.net/Metadata_Block#.40run-at
因此我能够定义函数并轻松替换href。
度过愉快的一天