我们在页面中经常使用iframe来进行局部刷新,这是一个很方便的功能。比如我们用页面上的一个超链接来刷新我们指定的iframe,这时我们就在超链接标签中的target属性设置为我们要刷新的iframe的name,但是我们发现在有些浏览器中即使指定target为iframe的name,但是仍然会弹出一个新的窗口在现实新内容,这是我们不希望看到的,要解决这个问题就要用就用javascript来控制了。

具体代码如下:

<script type="text/javascript">
    function resetFrame(obj){$(obj).height($("#imglist .images",$("#listiframe").contents()).height()+500);}
    function initImg(){$('#listiframe').attr('src', $('.imgsider ul li:first-child a').attr('href'));}
    function toUrl(obj){$('#'+$(obj).attr('target')).attr('src', $(obj).attr('url'));}
    $(function(){initImg();});
</script>
<table class="imglist">
    <tr>
        <td style="height:80px;text-align:right;padding-right:20px;" class="font-yahei font-40">华文摄影</td>
        <td class="font-yahei font-40">图片展示</td>
    </tr>
    <tr>
        <td class="imgsider">
            <ul>
                {%for img in imglist%}<li><a url="/image{%if img.name%}/{{img.name}}{%else%}-{{img.id}}{%endif%}.html" onclick="toUrl(this);" target="listiframe">{{img.title}}</a></li>{%endfor%}
            </ul>
        </td>
        <td class="imgview">
            <iframe src="" id="listiframe" name="listiframe" onLoad="javascritp:resetFrame(this);" width="100%" frameborder="0" scrolling="no"></iframe>
        </td>
    </tr>
</table>

这个问题只在部分落后的浏览器上出现,我不知道为什么他们要这样做。像chrome,ff浏览器都没问题。而360安全浏览器这个在中国使用量最大的流氓浏览器就有这个问题。如果是我自己的网站,如果出现这样的问题我是不解决的,对于仍使用这种垃圾流氓浏览器的用户可以忽略掉,但是面对企业网站的用户,我们不得不做出妥协了。