1

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);

しかし、これでも私は常にネイティブ実装に戻ってしまいます。

4

1 に答える 1

0

Chrome の Greasemonkey スクリプトから JS 関数をページに挿入するから:

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);
于 2013-06-07T13:44:03.510 に答える