2009-06-27 55 views
1

以下是来自Joomla插件的代码。它在它自己的工作,它的目的是检测页面上的外部链接,并使用_blank强制他们进入新的浏览器窗口。全球外部链接确认警报的Javascript问题

我已经试过了大约一个小时(我不知道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)有更好的解决方案吗?

+0

没有人可以提供任何帮助吗? – OverDrive 2009-06-29 13:39:18

+0

嘿,我发现这个主题,并认为它很有趣。但遗憾的是最重要的信息缺失。可以xou - OVerdrive - plese告诉我们,您正在使用哪个Joomla Plugin?我需要同样的东西,并在研究后找不到它......非常感谢。 nauck – Nauck 2010-03-16 15:29:20

回答

0

因此,我将总结我的想法,然后告诉你我的想法如何解决。这可能是我误解了你的问题。

你得到的代码遍历所有标签,并将它们的target属性设置为“_blank”,并将它们的className设置为“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"; 
    }; 

对无效信息请参见here(0)。

另外,请注意,设置obj.className为“空白”不是很大,因为它会删除任何其他类名的代码已经被分配给的链接。您可以改为将类名添加到现有的类中,如下所示:

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

一切正常,因为我现在想要它。感谢您的帮助。由于这是我第一次使用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"; 
    }; 
0

我精码多一点点。请考虑将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);