我的tml中有一个简单的链接(特定于apache tapestry):
<a href="www.google.com" class="info-value" target="new">www.google.com</a>
现在在浏览器上如果我试图点击链接,实际上它正在重定向到
http://localhost:8080/..../..../www.google.com
而不应该为该链接打开一个新标签。
所以我想的逻辑是:
1) Fire a javascript on page load
2) Get the href value of anchor tag
3) Append http:// at the start, if it doesn't contains it.
所以要做到这一点,实际上我想使用原型(javascript框架),我对此有点新鲜......
如何使用Prototype.js库编写函数?
答案 0 :(得分:2)
您没有说明href
的价值来自哪里。正如你所说,你需要添加一个“http”。假设链接是动态呈现的,为什么不在服务器端执行此操作,可能更容易。在tml:
... href="${url}" ....
和.java:
public String getUrl() {
return "http://" + url;
}
这比客户端更好的方法,如果用户关闭了javascript会发生什么?
另一方面,如果它是.tml中的静态链接,只需写上“http://www.google.com”!
编辑:根据您的评论如下:
public String getUrl() {
if (!url.startsWith("http://") {
url = "http://" + url;
}
return url;
}
以上只是做什么的一个例子。您可以向activityDetails
添加另一个执行此操作的方法(例如getExternalLinkWithProtocol()
),或者提供类似于上述方法的包装方法。
答案 1 :(得分:1)
没有理由在客户端这样做。只需将模板更改为:
&lt; a href =“http://www.google.com”class =“info-value”target =“new”&gt; www.google.com&lt; / a&gt;
如果它基于属性:
&lt; a href =“http:// $ {hostname}”class =“info-value”target =“new”&gt; $ {hostname}&lt; / a&gt;
...调整以适合您的属性等。
答案 2 :(得分:0)
window.onload = function(){
var links = document.links;
for(var i=links.length-1; i>=0; i--){
var link = links[i];
var href = link.getAttribute("href");
if(href.indexOf("http://") < 0){
link.href = "http://" + href;
}
}
};