【问题标题】:Can I force all links in a WebView (or WebFrame) to be treated as absolute paths?我可以强制将 WebView(或 WebFrame)中的所有链接视为绝对路径吗?
【发布时间】:2009-08-14 04:28:17
【问题描述】:

所以我正在使用 WebKit - WebView 和 WebFrame。我使用自定义 NSURLProtocol 从数据库中检索每个请求的 HTML。问题在于 HTML 中的链接都是相对的,而实际上它们应该是绝对的。比如页面

foo/bar.html

可能有一个链接指向

foo/baz.html

问题是由于链接是相对的,所以请求最终是 for

/foo/foo/baz.html

到目前为止,我已尝试通过比较两个 URL 并去除公共前缀(在本例中为“foo/”)来解决此问题,留下 foo/baz.html。然而,这并不适用于所有可能性,尤其是当路径中有多个目录时。我在 WebView 的 frameLoadDelegate 的“didStartProvisionalLoadForFrame:”方法中执行此操作。

很遗憾,我无法控制正在显示的 HTML,因此无法修改链接本身。

【问题讨论】:

    标签: objective-c cocoa webkit webview


    【解决方案1】:

    尝试成为主框架的资源加载委托,并实现webView:resource:willSendRequest:redirectResponse:fromDataSource: 来修改所请求的 URL。将 relativeString 发送到请求的 URL 以获取原始相对 URL,然后使用 -[NSURL initWithString:baseURL:] 创建一个新 URL,该 URL 具有与正确的基本 URL 相同的相对字符串。

    【讨论】:

    • 出于某种原因,[request relativeString] 给了我整个 URL,当前目录已经在前面 - 也就是说,relativeString 和 absoluteString 返回相同的字符串。
    • 所以我搞定了。在 webView:resource:willSendRequest:redirecResponse:fromDataSource: 中,我得到了请求的 URL 以及当前页面的 URL。我可以通过删除最后一个路径组件来获取当前目录,然后从请求 URL 的开头删除它。我将接受这个答案,因为它至少为我指明了正确的方向。谢谢!
    猜你喜欢
    • 2014-10-30
    • 2017-06-19
    • 1970-01-01
    • 2016-11-12
    • 2011-06-17
    • 2020-08-07
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    相关资源
    最近更新 更多