2012-01-23 10 views
1

私は約300のjspヘルプページで実装されているJavaScript関数 "print_something"を持っています。 この "print_something"関数を修正する必要があることが判明しました。 私は300ファイルを変更しないように解決策を探しています。Javascriptコールバック

私はカスタムヘルプページを開く1ページがあります。

window.open('SomeHelpPage101.htm', 'Help', 'location=no,status=no,height=500,width=600,resizable,scrollbars'); 

を私はこのような機能を再定義するためにしようと試み:

var jsObject = window.open('SomeHelpPage101.htm', 'Help', 'location=no,status=no,height=500,width=600,resizable,scrollbars'); 
jsObject.print_something() = function(){//corrected function} 

私はステップバイステップでない場合、それはすべてのFirebugでうまく動作します。しかし、コードを実行すると、window.open(...)は非同期なので、まだ終了していないので、再定義は機能しません。

どうやってwindow.open(...)を強制終了してからprint_something()を再定義しても問題ありません。

ありがとうございます。私は、これはすでにので、ここでカバーされていると思い

+0

'jsObject.print_something()='が正しくないようです。 [MDNによる](https://developer.mozilla.org/ja/DOM/window.open)、すべてがうまくいけば、 'window.open'は常に新しいウィンドウへの参照を返します。 –

+2

同じjs関数を300個のファイルに入れるのではなく、スタンドアロンの.jsファイルに移動して、そのファイルを300ページに含めるだけです。 –

+0

できるかどうか分かりませんが、できれば 'jsObject.print_something = function(){}'になります。あなたが持っている 'jsObject.print_something()'はメソッド呼び出しです。 – JMM

答えて

0

は、それへのリンクです:

Set a callback function to a new window in javascript

+0

私はこのようにtryyded: var RunCallbackFunction = function(){}; //参照ホルダのみ \t \t \t \t function custom_print(){ alert( 'parent function!'); //参照ホルダのみ self.focus(); self.print(); } \t \t \t \t \t VAR helpPopupの=のwindow.open(CustomPage101.htm ')。 helpPopup.onload = function(){helpPopup.RunCallbackFunction = custom_print; }; しかし、親機能を印刷しようとすると、まだアロケートされていません。 何か間違っていますか? – MerkoSMS

+0

あなたは 'が見つかりませんでした。' \t var helpPopup = window.open(CustomPage101.htm ') 最初にあなたが上書きしないように、いくつかの種類のチェック(window.onload!= null)をしてください。私はこれを試したことはありませんが、最初に変数に参照を保存してから、代わりに古いonloadとコールバック関数を含むラッパー関数を使用してください。 – user227353

+0

私はまたtryied: var helpPopup = window.open(CustomPage101.htm '); helpPopuponload = function(){ helpPopup.custom_print = function(){ アラート( 'parent function!'); helpPopup.focus(); helpPopup.print(); }; \t まだ成功していません... – MerkoSMS

0

ヘルプとアドバイスのために非常に多くの皆さんありがとうございました。 :)

解決策は、オブジェクトが初期化されているかどうかを待つsetInterval関数を使用していました。

function Help() 
{ 
    // asynchronous object initialisation with "window.open" 
    var jsOBJ = window.open('HelpPage' + pageID + '.htm', 'Help', 'location=no,status=no,height=500,width=600,resizable,scrollbars'); 
    // check every 100 ms if "window.open" has finished and "jsOBJ.custom_print" has initialised 
    var helpTimer = setInterval(function() { 

     if(jsOBJ.custom_print) { 
      clearInterval(helpTimer); 
      // override function which is declared in child pages which we open with "window.open" 
      jsOBJ.custom_print = function() { 
       alert('Test call from redefined parent function.'); 
       jsOBJ.print(); 
      }; 
     } 
    }, 100); 
} 
関連する問題