如果我打开Chrome开发者工具控制台并更改HTMLMediaElement.prototype.play
,它就可以正常使用。
> HTMLMediaElement.prototype.play = function(){debugger;}
function (){debugger;}
> HTMLMediaElement.prototype.play
function (){debugger;}
但是,如果我从用户脚本更改它,该函数似乎总是恢复到本机实现。
> HTMLMediaElement.prototype.play
function play() { [native code] }
我已经验证用户脚本正确加载,我甚至尝试了一种丑陋的setInterval方法,看看是否至少有效:
var myFunction = function(){debugger;};
window.setInterval(function(){
if (window.HTMLMediaElement.prototype.play != myFunction)
window.HTMLMediaElement.prototype.play = myFunction;
}, 900);
但即便如此,我总是以本机实现结束。
答案 0 :(得分:0)
来自Injecting JS functions into the page from a Greasemonkey script on Chrome:
与页面上运行的代码进行通信的唯一方法 Chrome是通过DOM进行的,所以你必须使用像插入这样的黑客 包含代码的标记。请注意,如果你的话,这可能是错误的 脚本需要在页面上的其他所有内容之前运行。
编辑:以下是Nice Alert扩展程序如何执行此操作:
function main () { // ... window.alert = function() {/* ... */}; // ... } var script = document.createElement('script'); script.appendChild(document.createTextNode('('+ main +')();')); (document.body || document.head || document.documentElement).appendChild(script);