【问题标题】:UIWebView with NavigationBar带有导航栏的 UIWebView
【发布时间】:2015-08-30 07:42:05
【问题描述】:

假设有一个帖子列表,如果您单击一个 postItem,则会显示详细的帖子视图。例如,

/索引

[post1, post2, post3 ...]

post1 被点击

/posts/1

Hello! I am a post!

此外,将包含在 UIWebView 中的网站是一个单页 Web 应用程序,这让事情变得有些棘手。由于 webapp 呈现 部分而不是 redirecting,因此导航不一定会发出另一个 Web 请求。对于为每个导航发出新 url 请求的常规网站,我可以使用 webViewDidStartLoadshouldStartLoadWithRequest,每个网页有一个 ViewController。对于我的情况,一个天真的解决方案是使用 window.location = url 为每个导航强制重新重定向。

但是,这会失去渲染特定部分带来的性能提升。更好的方法是在用户离开索引页面时动态附加一个导航项,例如titleback button。问题是,如果我没有进行完全重定向,我如何检测用户是否从 /index 移动到 /posts/1?

非常感谢您!

【问题讨论】:

    标签: ios objective-c swift uiwebview


    【解决方案1】:

    对于绑定标题和后退按钮的最后一个想法,您可以使用以下内容,但您需要修改网站代码。

    您可以使用自定义协议/url 方案从 web 视图与您的本机控制器通信。

    我们的想法是在您需要更新时拨打window.location = 'myapp://thisismyaction/thisisanarg' 之类的电话。

    拨打电话后,您使用-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 拦截它。

    在此方法中,您解析请求以检测它是否以 myapp:// 开头,然后解析该行以获取您的操作和参数。语法取决于您,例如常规 queryString 或我的示例。您根据解析的内容进行更新和标题,然后返回 NO 以防止加载不存在的 URL。

    为了确保此调用仅来自 webview 而不是浏览器,您可以在 webview 使用 webview 中的 stringByEvaluatingJavaScriptFromString 方法完成加载时注入一些 javascript 对象,并在调用之前检查该对象是否已定义来自javascript。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多