base href url break <a href=""> anchor for fancybox</a>

时间:2013-02-26 06:40:02

标签: javascript jquery html joomla fancybox

我写了一些在点击链接时打开的程序。

<a class="myclass" href="#openfancybox">Open Fancybox</a>

它使用了一个fancybox,jQuery,一切都很完美。 一旦我将其实施到项目中,它就不起作用了。问题是项目中的代码:

<base href="http://somesite.com/" />

它转到基本网址而不是打开fancybox。

我尝试使用jQuery或javascript解决方案修复它,但我没有运气。

P.S。我不想从源代码中删除base,因为它可能会破坏项目中的其他内容(我有一个任务只能实现我的fancybox)。

P.P.S。此外,我肯定更喜欢纯javascript解决方案,因为我使用jQuery为我的fancybox,但预计与其他框架的冲突。该项目是为Joomla。

2 个答案:

答案 0 :(得分:4)

如果您使用base代码和fancybox,或者您在 this DEMO 中看到的内容,那么绝对没有冲突......并且不需要额外的javascript / jQuery如先前建议的那样破解或修复(不存在的)问题。

但是,我认为您清楚地了解base标记会影响您的所有相对路径,包括您的锚点<a>标记以及您的<link><script>和/或您的<img />代码。换句话说,任何使用href和/或src属性的标记。

话虽如此,请考虑这种情况:

假设您有一个页面test.html,该页面位于名为sandobox的子目录中。这样的页面的完整路径是http://somesite.com/sandbox/test.html,对吗?

现在假设您使用相对路径从test.html内加载fancybox,如:

<link rel="stylesheet" type="text/css" href="fancybox/jquery.fancybox.css" />
<script type="text/javascript" src="fancybox/jquery.fancybox.js"></script>

......这相当于使用以下绝对路径:

分别为

http://somesite.com/sandbox/fancybox/jquery.fancybox.csshttp://somesite.com/sandbox/fancybox/jquery.fancybox.js

现在,如果您决定添加base标记,请执行以下操作:

<base href="http://somesite.com/" />

...所有相关路径,包含您对fancybox文件的调用都将转换为:

http://somesite.com/fancybox/jquery.fancybox.csshttp://somesite.com/fancybox/jquery.fancybox.js

由于fancybox文件实际位于sandbox子目录下,因此您的文档将无法加载它们(因为base标记),因此您的fancybox实现将失败。

要解决冲突,您可以这样做:

  • <link><script>标记或
  • 中使用绝对路径
  • 重新定位与base路径相关的文件。

查看有关base代码Is it recommended to use the <base> html tag?

的好问题/答案

答案 1 :(得分:0)

如果还有人发生这件事。使用base href与fancybox实际上存在冲突。

Fancybox中有一个检查,它会查看所点击元素的href并检查#符号,如果它发现它将类型设置为内联。

https://github.com/fancyapps/fancyBox/blob/master/source/jquery.fancybox.js#L303

这可以在不使用<base href>的情况下正常工作,但是如果您使用它,则href属性将返回带有哈希的完整网址,因此查找href.charAt(0) === '#'的检查将失败,因为第一次聊天不再是#,而是可能是h。

也许不是检查charAt(0) === '#',而应该只是寻找#而是进行拆分。