如果匿名声明了javascript函数,有没有办法覆盖它或部分内容?
我试图阻止google.com的即时搜索劫持向上和向下箭头键以在搜索排名中移动。我已经确定了我认为有问题的代码部分。密钥代码38和40用于向下和向上键。
if (b == 40) aa(f);
else if (b == 38) aa(j);
else if (b == 37 || b == 39) if (!ca(b == 39)) return f;
a.preventDefault && a.preventDefault();
return a.returnValue = j
问题在于,这是一个名为Sb = function(a){}的函数的一部分,它位于大约三千行匿名函数中。在SO here上发布了一个类似的问题,作者最终以一种不适合我的黑客方式进行工作。我意识到我可以关闭即时搜索,但我喜欢它,我无法忍受我的箭头键不再起作用。
解决方案:
我最后写了chrome extension来恢复向上/向下箭头键功能以滚动。我使用了以下代码。谢谢Raze和Mofle。
if (event.keyCode == 40 || event.keyCode == 38) {
event.cancelBubble = true;
event.stopPropagation();
return false;
}
答案 0 :(得分:3)
您无法覆盖另一个匿名函数中的匿名函数。您不能更改任何现有函数的部分,您必须创建一个新函数并将其附加到需要的位置,尽管您可以获取函数的来源,操作它并从源代码创建一个新函数。
我对此问题有两点建议,不涉及重新定义函数。
答案 1 :(得分:2)
您可以通过捕获箭头键事件并防止它们冒泡来轻松完成此操作。
window.addEventListener('keydown', function(e) {
e.stopPropagation();
}, true);
经过测试并可在google.com上使用
答案 2 :(得分:0)
从元素中删除所有事件侦听器,方法是将其替换为自身的克隆(node.parentNode.replaceChild(node.cloneNode(true), node)
),然后应用手动修改的Google JavaScript代码版本(document.documentElement.appendChild(document.createElement("script")).src="
location of your modified script
"
)。
答案 3 :(得分:-1)
在执行函数之前尝试使用硬核替换。
document.body.innerHTML = document.body.innerHTML.replace(/if (b == 40) aa(f);/,'').replace(/else if (b == 38) aa(j);/,'').replace(/else if (b == 37 || b == 39) if (/a.preventDefault && a.preventDefault();/,'').replace(/return a.returnValue = j/,'')
可能会起作用