我写了一些在点击链接时打开的程序。
<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。
答案 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.css
和http://somesite.com/sandbox/fancybox/jquery.fancybox.js
。
现在,如果您决定添加base
标记,请执行以下操作:
<base href="http://somesite.com/" />
...所有相关路径,包含您对fancybox文件的调用都将转换为:
http://somesite.com/fancybox/jquery.fancybox.css
和http://somesite.com/fancybox/jquery.fancybox.js
。
由于fancybox文件实际位于sandbox
子目录下,因此您的文档将无法加载它们(因为base
标记),因此您的fancybox实现将失败。
要解决冲突,您可以这样做:
<link>
和<script>
标记或base
路径相关的文件。答案 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) === '#'
,而应该只是寻找#
而是进行拆分。