2009-07-07 1 views
0

をリロード私はJavascriptを持っているページの後のonclickイベントスティックを行います別のウィンドウを開き、すべてのリンクのクリックハンドラを登録することが

//Inside a class somewhere 
this.file_browser_window = $(window.open("/filebrowser", "file_browser_window", 
     "width=800,height=600")) 

Event.observe(this.file_browser_window, 'load', function(){ 
    //This is the event I am after 
    Event.observe(this.file_browser_window, 'click', handle_click_in_browser); 
}.bindAsEventListener(this)); 

// The Handler function 
function handle_click_in_browser(evt){ 
    evt.stop(); 

    url = evt.target.href; 

    if(url && url.endsWith('.png')){ 
     console.log("Image clicked"); 
     //REMMEMBER THIS URL ON MAIN PAGE 
     this.close(); 
    } 
    else{ 
     console.log("Regular stuff clicked", this); 
     this.location = url; //<-- THIS is the breaking point 
    } 
} 

ただし、ユーザーがそのポップアップウィンドウにいくつかのリンクをクリックしたときに、ときページの再読み込み、私のクリックハンドラーがなくなった!

ポップアップウィンドウ内のリンクは、同じドメインを指します。

今、は、ポップアップウィンドウのソース(html)を変更できません。 をキャッチユーザがクリックしたリンクタグのhref(画像を指す場合)。

興味があれば、私はdjango-filebrowserをポップアップウィンドウで実行しています。

+0

ポップアップウィンドウのリンク先を同じドメイン内のページ? – SLaks

+0

彼らは確かにそうです – drozzy

答えて

0

ポップアップページ自体の中で、ポップアップページのクリックイベントハンドラを適用する必要があります。私は親ウィンドウにこれらのイベントハンドラーを担当させる理由は見当たりません。

+0

更新を参照してください。私はポップアップのソースを変更することはできません。 – drozzy

+0

それはなぜですか? –

+0

ポップアップのためにあらかじめ作られたファイルブラウザを使用しています。それはそれ自身のすべてのものを行う、私は結果をキャプチャする必要があります。私はそれへのリンクで質問を更新します。 – drozzy

1

新しいポップアップウィンドウのiframe内にファイルブラウザページを置くことで、この問題を回避することができます。私はこのコードを編集するために戻ってくるかもしれませんが、ここではあなたが始めるかもしれないいくつかのコードがあります(テストなしでこれを行うのと同じように動作しないでしょう)

==あなたがポップアップを起動しているページnew_wrapper_page.html ===========

<html> 
<head> 
<script type="text/javascript"> 
// most of your existing code stays the same, but things are moved around 

function listenForClicks() { 
    var ifrm = $('filebrowser_iframe'); 
    var content = (ifrm.contentWindow ? ifrm.contentWindow.document : (ifrm.contentDocument ? ifrm.contentDocument : null)); 
    if (content) { 
     //This is the event I am after 
     Event.observe(content, 'click', handle_click_in_browser); 
    } 

} 

// The Handler function 
function handle_click_in_browser(evt){ 
    evt.stop(); 

    url = evt.target.href; 

    if(url && url.endsWith('.png')){ 
     console.log("Image clicked"); 
     //REMEMBER THIS URL ON MAIN PAGE 
     parent.close(); 
    } 
    else{ 
     console.log("Regular stuff clicked", this); 
     parent.location = url; //<-- THIS is the breaking point 
    } 
} 
</script> 
</head> 
<body> 
<iframe id="filebrowser_iframe" src="/filebrowser/" width="800" height="600" onload="listenForClicks();"/> 
</body> 
</html> 

インサイド===========

// some code to launch the file browser wrapper popup 
var file_browser_popup = $(window.open("/new_wrapper_page.html", "file_browser_popup", 
       "width=800,height=600")); 

==とにかく、それは一緒にプレイするものです。プロトタイプのスキルが弱いと私はあなたに何をしようとしているか正確に把握するためにあなたの既存のコードを使用している...

+0

iframeのコンテンツが変更されるとどうなりますか?クリックが再登録されるか、手動で行う必要がありますか? – drozzy

+0

ああ、私はonloadがそれを処理すると思います。気にしないで。 – drozzy

+0

ブラウザ内のリンクをクリックすると、ページ上にiframeを保持するにはどうすればよいですか? iframe.contentWindow.location = urlまたはiframe.content = load_from_url(url)... ??? – drozzy

関連する問題