【问题标题】:External links not opening in jQtouch在 jQtouch 中未打开外部链接
【发布时间】:2012-09-19 10:36:45
【问题描述】:

我正在使用 jQtouch 为文档管理器编写一个 Web 应用程序,并在其中添加了“热门搜索”部分。你可以在http://dl.dropbox.com/u/97184921/Project/index.html看到整个事情

下面的代码应该显示一个包含两个项目的无序列表(它确实如此) - 一个链接到 Google,另一个链接到 BBC 作为测试网站。它们都应该有缩略图并显示出来,但是当点击链接时,它似乎不会将用户发送到 Google 或 BBC。有人可以帮忙吗?

        <li><a href = "http://www.google.co.uk/"><img height = "20" width = "20" src = "images/search.png">google</a></li>
        <li><a href = "http://www.bbc.co.uk/"><img height = "20" width = "20" src = "images/search.png">bbc</a></li>

【问题讨论】:

  • @MichalKlouda — 图像被定义为 EMPTY,它们会自行关闭。
  • @Michal Klouda 你没有关闭图片标签,你之前有没有写过html?
  • @Miszy 我确实打开了链接。由于某种原因,它在我的 Nightly 上不起作用,只是切换到 Canary,现在它可以工作了。无论如何,我只是建议 OP 为下一个问题做一个 SSCCE,这样你通常会得到更快更好的答案。
  • 这是一个很好的建议。只是有这么多人在阅读代码之前就发布了答案......
  • @Miszy 链接到表明问题的整个站点并不是 SO 的最佳实践。应尽可能避免这种“代码墙”效应。另一个问题是它使其他人将来无法使用该问题(从而使他们“过于本地化”)。

标签: javascript html jqtouch


【解决方案1】:

jqtouch site 上,他们建议您在打开外部链接时使用target="_blank"

如果您想在同一窗口中打开链接,请尝试rel="external"

source

更好的source 更多信息

【讨论】:

  • OP在哪里说JQTouch?
  • @JamWaffles Nowhere,但他正在使用它。在评论之前打开链接。 code.google.com/p/jqtouch/issues/detail?id=9
  • @Miszy 我不喜欢点击随机的 Dropbox 链接,但是是的,你是对的。如果 OP 用jqtouch 标记他们的问题或明确声明他们正在使用它,那么他们本可以为自己提供很大帮助。
  • 非常感谢 target = "_blank" 的帮助,但这会在新窗口中打开链接,我希望它在同一个窗口中打开?
【解决方案2】:

问题似乎是您的链接被您的 javascript 挂钩,并且处理点击的脚本失败。

如果您在 FIreBug 中查看 javascript 控制台,您会在单击链接后发现如下错误:

选项http://www.google.co.uk/ 405(不允许的方法)jquery.js:19 XMLHttpRequest 无法加载 http://www.google.co.uk/。 > Access-Control-Allow-Origin 不允许来源http://dl.dropbox.com

正如@davehale23 建议的那样,将target="_blank" 添加到您的链接将解决问题(同样,您可以通过调整FireBug 中的链接元素之一来测试这一点。

【讨论】:

    【解决方案3】:
    <li><a href = "http://www.google.co.uk/" target="_blank"><img height = "20" width = "20" src = "images/search.png">google</a></li>
    <li><a href = "http://www.bbc.co.uk/" target="_blank"><img height = "20" width = "20" src = "images/search.png">bbc</a></li>
    
    锚标记中的

    target="_blank" 会打开一个新页面(或选项卡),而不是在当前浏览器窗口中打开它。这是最好的方法,因为如果用户想要返回您的网站,用户无需离开您的网站并处理缓存问题。

    http://jsfiddle.net/UCnY3/

    如果你使用谷歌浏览器的开发者工具显示错误:

    “拒绝显示文档,因为 X-Frame-Options 禁止显示。”

    更多关于 X-Frame-Options 的信息可以在这里找到:

    https://developer.mozilla.org/en-US/docs/The_X-FRAME-OPTIONS_response_header

    X-Frame-Options 有两个可能的值:

    DENY 无论站点如何,该页面都不能在框架中显示 试图这样做。

    SAMEORIGIN 页面只能显示在一个 框架与页面本身同源。

    换句话说,如果你 指定 DENY,不仅会尝试在框架中加载页面失败 从其他站点加载时,加载时尝试这样做会失败 来自同一个站点。另一方面,如果您指定 SAMEORIGIN,您 只要站点将其包含在框架中,仍然可以在框架中使用该页面 一个框架,它与为页面提供服务的框架相同。

    【讨论】:

    • 我没有阅读其他人发布的内容。他们在我回复之前发布了内容。我发布答案后,更多人能够在我之前得到它。不过还是谢谢你评判我.. 讽刺
    • “我没有阅读其他人发布的内容”只是说明了一切。
    • no.. 当我回答这个问题时.. 没有人发布.. 在我发布了我的答案之后.. 又出现了 2 个帖子,我在 jsfiddler 上做了一个演示来证明这一点,我去查找 X-Frame 的链接。
    • @Miszy 这个答案可能是多余的,但我认为你太苛刻了:花时间建立一个答案而不阅读其他答案。
    • 如果有答案,我会阅读其他答案!写完所有内容后,我花了一段时间才发布答案。当我意识到有人已经发布了答案时,为时已晚,我去添加更多关于 X-Frame 选项的内容(甚至没有人提及)