私が次のようなものを持っている場合
alert = 0;
別のスクリプトで。
これは別のスクリプトにあり、私のコードはそのスクリプトの前にロードできません。
alert
スクリプトで元のメソッドを呼び出すにはどうすればよいですか?
私が次のようなものを持っている場合
alert = 0;
別のスクリプトで。
これは別のスクリプトにあり、私のコードはそのスクリプトの前にロードできません。
alert
スクリプトで元のメソッドを呼び出すにはどうすればよいですか?
元の をオーバーライドする前にalert
、保存してください。
var origAlert = alert;
alert = 0;
origAlert("foo");
デモ: http://jsfiddle.net/jfriend00/tnNE7/
元の値を保存できない場合、私が知っている唯一の他の方法は、iframe にアクセスすることです。次に例を示します。
alert = 0;
var iframe = document.createElement("iframe");
iframe.height = 0;
iframe.width = 0;
document.body.appendChild(iframe);
iframe.contentWindow.alert.call(window, "foo");
作業例: http://jsfiddle.net/jfriend00/waMEV/
すべてのブラウザーでこれを試したわけではありませんが、Chrome、IE、Firefox で動作し、他のブラウザーでも動作するはずです。
わかりました、これが醜い答えであることを認めたのは私が初めてですが、うまくいくようです:
alert = 0;
var win = window.open(),
method = win.alert;
win.close();
method.call(window, "my message");
ここでフィドル。alert
基本的に、新しいウィンドウ インスタンスを作成し、そのメソッドを盗みます。欠点は、短い時間ではありますが、実際には新しいブラウザ ウィンドウを開く必要があることです。これが実際にあなたの問題に対する実用的な解決策であるとは思えません - あなたが作業しようとしている他のサイトと、あなたの解決策がエンドユーザーにどのように見えるかをどれだけ気にするかによって異なります.
編集:これは、上記の回答とjfriend00の回答の組み合わせであり、「新しいウィンドウを開く」問題を解決します。a)メソッドを呼び出す必要があるときにiframeがまだDOMにあることに依存せず、b)任意のwindow
メソッドに一般化できる必要があるため、これはやや良いオプションだと思います.jfriend00の答えはおそらくそうです' t。
alert = 0;
// make a new window instance in an iframe
var iframe = document.createElement("iframe");
iframe.height = iframe.width = 0;
document.body.appendChild(iframe);
// steal the method
var method = iframe.contentWindow.alert;
// remove the evidence
document.body.removeChild(iframe);
// now use the method for your own purposes
function myAlert(message) {
method.call(window, message);
}
myAlert("foo");