供稿人

2007年5月25日星期五

使Blogger链接弹出新窗口

Blogger里的链接都是在原窗口中打开,通常我们在文章里要新开窗口打开链接时,只需要注意在输入链接时,后面加上 target="_blank" 就可以了,

如 <a href="http://......" target="_blank">

但是通过模版在侧栏增加的链接列表,只能到模版html去修改。比如我的Blog右侧友情链接,就是一个链接列表。修改模版HTML,找到如下代码(注意勾选“扩展窗口小部件模板”选项),把红色部分加进去,保存模版。

<b:widget id='LinkList1' locked='false' title='友情链接' type='LinkList'>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2></b:if>
<div class='widget-content'> <ul>
<div id='link'>
<b:loop values='data:links' var='link'> <li>
<a expr:href='data:link.target' target='_blank'><data:link.name/></a></li> </b:loop>
</div> </ul> <b:include name='quickedit'/> </div></b:includable></b:widget>

在网上还找到一篇文章,指出当我们使用严格的DOCTYPE(xhtml1-strict.dtd)时,这个方法将通不过W3C的校验,会出现如下错误提示:

"there is no attribute target for this element(in this HTML version)"

在HTML4.01/XHTML1.0/XHTML1.1严格DOCTYPE下,target="_blank"、target="_self"等等语法都是无效的,我们只能通过JavaScript来变通实现。
标准格式是这样的

<a href="document.html" rel="external">打开一个新窗口</a>

还要配合javascript代码如下:

function externallinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external")
anchor.target = "_blank";
}
}
window.onload = externallinks;

可以把它保存成一个.js文件(比如external.js),然后通过外部联接方法调用:

<script type="text/javascript" src="external.js"></script>

真不知道老外为什么要把弹出新窗口这个简单的问题复杂化,也许是他们认为没有明确提示就打开一个新窗口是不礼貌的。

这个办法我还没用,至少采用过渡型的DOCTYPE(xh tml1-transitional. dtd)时没有问题,我这里就没有什么异常现象发生,以后再说了,先做个记号存起来。

没有评论:

 
Blogger Template Layout Design by [ METAMUSE ] : Code Name BlackCat 2.0.0