1

If I open the Chrome developer tools console and change HTMLMediaElement.prototype.play, it works just fine.

> HTMLMediaElement.prototype.play = function(){debugger;}
function (){debugger;}
> HTMLMediaElement.prototype.play
function (){debugger;}

However, if I change it from a user script, the function always seems to revert to the native implementation.

> HTMLMediaElement.prototype.play
function play() { [native code] }

I have verified that the user script loads correctly, and I even tried an ugly setInterval approach, to see if at least that works:

var myFunction = function(){debugger;};
window.setInterval(function(){
  if (window.HTMLMediaElement.prototype.play != myFunction)
    window.HTMLMediaElement.prototype.play = myFunction;
}, 900);

But even with this I always end back up with the native implementation.

Protector one
  • 6,926
  • 5
  • 62
  • 86

1 Answers1

0

From Injecting JS functions into the page from a Greasemonkey script on Chrome:

The only way to communicate with the code running on the page in Chrome is through the DOM, so you'll have to use a hack like inserting a tag with your code. Note that this may prove buggy if your script needs to run before everything else on the page.

EDIT: Here's how the Nice Alert extension does this:

function main () {
  // ...
  window.alert = function() {/* ... */};
  // ...
}

var script = document.createElement('script');
script.appendChild(document.createTextNode('('+ main +')();'));
(document.body || document.head || document.documentElement).appendChild(script);
Community
  • 1
  • 1
Protector one
  • 6,926
  • 5
  • 62
  • 86