2009-06-27 13 views
1

以下はJoomlaのプラグインのコードです。それはそれ自身で動作し、その目的は、ページ上の外部リンクを検出し、_blankを使用してそれらを新しいブラウザウィンドウに強制することです。グローバルな外部リンク確認アラートでのJavascriptの問題

私は約1時間試しました(私はよくJavaScriptを知らない)が、私はどのようにonclick機能を働かせるかを理解できないようだ。

最終結果、このスクリプトに2番目のコードセクションに示す確認ダイアログの機能を追加します。

外部リンクをクリックすると確認ダイアログがポップアップし、「はい」と表示された場合、外部URLにアクセスして新しいウィンドウで開くことができます。さもなければ、それはキャンセルし、何もしません。

onclick="return ExitNotice(this.href);"
のリンクを作成すると完全に動作しますが、私のウェブサイトには複数の人が入力を提出しているので、確認ボックスをグローバルにしたいと思います。

this.blankwin = function(){ 
    var hostname = window.location.hostname; 
    hostname = hostname.replace("www.","").toLowerCase(); 
    var a = document.getElementsByTagName("a"); 
    this.check = function(obj){ 
    var href = obj.href.toLowerCase(); 
    return (href.indexOf("http://")!=-1 && href.indexOf(hostname)==-1) ? true : false;    
    }; 
    this.set = function(obj){ 
    obj.target = "_blank"; 
    obj.className = "blank"; 
    };  
    for (var i=0;i<a.length;i++){ 
    if(check(a[i])) set(a[i]); 
    };   
}; 

this.addEvent = function(obj,type,fn){ 
    if(obj.attachEvent){ 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
    obj.attachEvent('on'+type, obj[type+fn]); 
    } else { 
    obj.addEventListener(type,fn,false); 
    }; 
}; 
addEvent(window,"load",blankwin); 

セカンドパート

/* ---------- 
    OnClick External Link Notice 
---------- */ 
function ExitNotice(link,site,ltext) { 
    if(confirm("-----------------------------------------------------------------------\n\n" + 
    "You're leaving the HelpingTeens.org website. HelpingTeens.org\ndoes not " + 
    "control this site and its privacy policies may differ\nfrom our own. " + 
    "Thank you for using our site.\n\nYou will now access the following link:\n" + 
    "\n" + link + "\n\nPress \'OK\' to proceed, or press \'Cancel\' to remain here." + 
    "\n\n-----------------------------------------------------------------------")) 
    { 
    return true; 
} 
history.go(0); 
return false; 
} 

A)は、誰も私がこの問題を解決する手助けすることはできますか? またはB)より良い解決策がありますか?

+0

誰も助けることができますか? – OverDrive

+0

ねえ、私はこのスレッドを発見し、それは非常に興味深いと思う。残念ながら、最も重要な情報が欠落しています。 xou - OVerdrive - pleseは、どのJoomlaプラグインを使用しているか教えてください。私は同じことが必要だとリサーチした後にそれを見つけることができませんでした...ありがとう。 nauck – Nauck

+0

すべて右、自分で見つけました。プラグインはMFBLANKと呼ばれ、このリンクの下にあるJoomla Extension Repositoryにあります: http://extensions.joomla.org/extensions/structure-a-navigation/site-links/4266 作成者http://Marcofolio.net。 //: あなたは素敵なHTTPを見たいと思って ...この素敵なGPL Joomlaのプラグインを楽しんでいるhttp://www.marcofolio.net/downloads/joomla/mfblank_for_j_1.5/details.htmlこちらも参照してください。 3d.nauck.eu 3Dウェブサイト?ここをクリック – Nauck

答えて

0

だから私は自分の考えていることを要約し、どのように解決できると思うかを伝えます。あなたの質問を誤解している可能性があります。

すべてのタグを通過し、ターゲット属性を "_blank"に設定し、classNameを "空白"に設定するコードがあります。代わりに、JavaScriptを使用して確認ダイアログを表示するリンクを書き換えたいとします。ユーザーが[はい]をクリックした場合にのみその場所に移動します。

<a href="javascript:void(0)" onclick="if (ExitNotice('http://www.whatever.com')) window.location.assign('http://www.whatever.com')"> 

のjavascript:私はあなたが彼らがそうのように書かれていたかのようにリンクが終わるしたいと考えている。この場合

無効(0)に行っていないために、クリックの通常のブラウザの取り扱いを引き起こしあなたのonclickが実行する時間があるように、別のページ。あなたはこのような何かに(this.blankwin内側)this.setの定義を変更したいと思う

これを実現するために、:

this.set = function(obj){ 
    var href = obj.href; 
    obj.href = "javascript:void(0)"; 
    obj.onclick = function() { (if ExitNotice(href) window.location.assign(href); }; 
    obj.target = "_blank"; 
    obj.className = "blank"; 
    }; 

は無効(0)上の情報のためhereを参照してください。

また、obj.classNameを "空"に設定するコードは、リンクに既に割り当てられている他のclassNameを削除するため、あまり良くありません。代わりに、次のようにクラス名を既存のクラス名に追加するだけでもかまいません。

obj.className = obj.className + " blank"; 
+0

私はあなたのコードを試して、それは動作しません、この行で壊れているようです。 obj.onclick = function(){if ExitNotice(href)window.location.assign(href);}; クラス名を既存のものに追加するように変更しました(私はJavascriptプログラマーではありませんので、そのことが分かりません) 私はその行をコメントアウトすると通知します – OverDrive

+0

私はそれを今すぐしたいと思っています。あなたの助けをありがとう。これは私が初めて使ったので、私はあなたに正しく信用されることを願っています。コメントボックスにコードを表示する方法(または可能であれば)を把握することはできません。自分の質問に答えることを選択しています。 – OverDrive

0

今はすべてがうまくいきます。ご協力ありがとうございました。私が初めてこれを使っているので、私はあなたに正しく信用されることを願っています。私はコメントボックスにコードを表示する方法(あるいは可能であれば)を理解することができないので、自分の質問に答えて、他の人が恩恵を受ける最終的なコードを選んでいます。

もう一度、私が望むように動作させるには、変更する必要のある構文を表示しました。

感謝!

this.set = function(obj){ 
      var href = obj.href; 
      //obj.href = "javascript:void(0)"; 
      obj.onclick = function() { return ExitNotice(href)}; 
      obj.target = "_blank"; 
      obj.className = obj.className + " blank"; 
    }; 
0

最終的なコードは、私は、もう少しコードを洗練しました。 mfblank.jsを次の内容に変更することを検討してください。これで、すべてのスクリプトが1つのファイルにのみ含まれ、さらにrel = nofollowが追加されました。このスクリプトをお楽しみください...

this.blankwin = function(){ 
    var hostname = window.location.hostname; 
    hostname = hostname.replace("www.","").toLowerCase(); 
    var a = document.getElementsByTagName("a"); 
    this.check = function(obj){ 
    var href = obj.href.toLowerCase(); 
    return (href.indexOf("http://")!=-1 && href.indexOf(hostname)==-1) ? true : false;    
    }; 
    this.set = function(obj){ 
      var href = obj.href; 
      obj.onclick = function(){ if(confirm("Do you wanne leave this page?")) { 
       return true; 
      } 
       history.go(0); 
       return false; 
      }; 
      obj.target = "_blank"; 
      obj.className = obj.className + " blank"; 
      obj.rel = "nofollow"; 
    }; 
    for (var i=0;i<a.length;i++){ 
     if(check(a[i])) set(a[i]); 
    };  
    }; 
    this.addEvent = function(obj,type,fn){ 
     if(obj.attachEvent){ 
      obj['e'+type+fn] = fn; 
      obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
      obj.attachEvent('on'+type, obj[type+fn]); 
     } else { 
      obj.addEventListener(type,fn,false); 
     }; 
    }; 
    addEvent(window,"load",blankwin); 
関連する問題