2013-04-10 63 views
1

在客户的网站上,有人在古代把<base> -tag放在超级父母瓷砖定义中,这很简单。这只是指本身,可以说,它是basicTileLayout.jsp的推杆了一个标签:Firefox调用<base> url

<base href="http://site.com/layout/basicTileLayout.jsp" /> 
的头部

该网站是时下大多是GWT。无论如何,一些奇怪的原因,Firefox和唯一的Firefox有时会让一个AJAX调用此基础URL时,例如点击GWT生成的链接看起来像这样在DOM:

<a class="gwt-Anchor" href="javascript:;">Read more</a> 

我的第一个想法是,它可能是一些在FF中以不同方式工作的事件冒泡,并且可能有一些href =“”被调用,而在其他浏览器中被GWT事件处理阻止。但是,删除base-tag应该可能会让应用程序的基本上下文路径取而代之(“/”),对吧?这不会发生。所以看起来这个基地标签的存在触发了FF来打电话。

我问的原因是,这是一个超级全局chrome-tile,因此删除基本标记会改变整个站点上的每个相对href。我很想做,但只是一点点吓:)

更新:

我做了一些GWT-谷歌上搜索,发现这个IE相关的啄:

https://code.google.com/p/google-web-toolkit/issues/detail?id=5280

我经历了代码,发现它似乎只发生在使用GWT:s Anchor生成的链接上,而没有从事件处理程序调用事件的preventDefault。

然后,我们可能会猜测Firefox可能会因为我们不阻止默认值而在调用unloadEvent的base-url时进行GET操作。但是为什么只有当我提供的基础标签无法理解时,才会调用url的ajax。

更新2:

我打过电话了preventDefault上的click事件,但是这并不能帮助。如果存在基本标记,则FF会获得该URL,如果没有,则不会发生任何错误。

任何指针高度赞赏!

回答

1

原来,这是由空IMG标签造成的:

<img src="" class="gwt-Image"> 

因此很明显,如果在头一个<base>,Firefox会实际上只是用它串联与此空SRC属性,因此使GET到基地的网址。没有webkit浏览器,也没有IE浏览器。

这可能是正确的做法。我会参考我在FF阅读的问题: https://bugzilla.mozilla.org/show_bug.cgi?id=444931

+0

请注意,如果您考虑这个*逻辑*,这是非常有道理的。你提供了一个源URL,它在正常情况下相对于基地得到了解决,因此当前页面又被加载了。这并不是说规格说它应该像这样工作(我通过你在bug中的评论来到这里)。我不知道他们说什么。(而且他们所说的任何话都可能会被改变,并且有足够的理由。)但是要注意的是,如果这是所谓的话,那么再次加载URL将是一个特殊情况。 – 2013-04-10 16:20:25

+0

+ 1供您分析并与社区分享。 – SSR 2013-04-11 03:55:18

+0

@Jeff - 当然!但是,如果没有base-tag存在,我不确定是否存在对默认基数的调用 - 但我没有注意到它。这让我感到困惑 - 在base-tag中存在对url的调用,但不是默认的。我mighe是错误的,但会再次检查。 – 2013-04-11 08:51:30