下面是从为Joomla插件的代码。它适用于它自己,它的目的是检测页面上的外部链接,并使用_blank迫使他们到新的浏览器窗口。

我已经试过了大约一个小时(我不知道JavaScript的很好),但我似乎无法弄清楚如何得到一个onclick功能的工作。

最终的结果,我要添加到该脚本确认对话框中的第二代码段中所示的能力,。

这是外部链接,点击后会弹出确认对话框,如果说是,他们将能够获得到外部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)是否有更好的溶液

有帮助吗?

解决方案

于是,我就总结一下我的我想你问,然后告诉你,我是怎么想的就能解决的。这是可能的,我误解你的问题。

您已经有了代码,通过所有标签云,并将其目标属性为“_blank”,将它们的类名“空白”,你想,而不是重写的链接使用JavaScript来显示一个确认对话框,并如果用户点击是只能去位置。

在这种情况下,我相信你想要的链接结束,好像他们写的,像这样:

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

JavaScript的:无效(0)导致点击的正常的浏览器处理不转到另一个页面,让你的onclick有时间执行

要做到这一点,你要的this.set(内this.blankwin)的定义更改为类似这样的:

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

此外,请注意,设置obj.className为“空白”的代码是不是很大,因为它会删除任何其他的className已经分配给的链接。你可以代替刚才添加的类名到现有的,像这样:

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

其他提示

一切正常,我想现在。谢谢您的帮助。由于这种使用SO是我第一次,我希望我正确地记你。因为我无法弄清楚如何(或者即使是可能的),以显示在评论框代码中,我选择回答与最终的代码我自己的问题让别人受益。

再一次,你告诉我,我需要修改,以得到它的工作我想要的方式的语法。

感谢您!

最终代码

    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";
    };

我精制代码更一点点。请考虑更换mfblank.js为以下内容。所以,现在,所有的脚本只在一个文件中,并加入一个额外的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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top