ios - 在 UIWebView 中使用 Backbone.js 路由器和 pushState

标签 ios backbone.js uiwebview pushstate

我正在开发一个基于 Backbone.js 的网络应用程序,对于某些用例,该应用程序将包装在 native iOS UIWebView 中。在 iOS 应用程序中——当我们想要在 WebView 中更改页面时——我们只需在 WebView 上发起一个新请求,相应地加载页面。

我唯一的问题是,当为请求的 URL 定义了 Backbone 路由时,我希望 Web View 使用 Backbone 的路由和 pushState 而不是启动一个全新的页面加载。但是,当没有任何主干路由对应于请求的 URL 时,Web View 应将其作为一个全新的页面请求来处理,并使用该 URL“重新加载”页面。

现在 native 应用程序使用 UIWebViewloadRequest: 方法并传递一个新的 NSURLRequest,其 URL 为例如“http://example.com/search”,作为参数。

现在我唯一的想法是使用 UIWebViewstringByEvaluatingJavaScriptFromString: 方法:

  • 让 Web View 调用一些 JS 函数,这些函数将依次检查我的主干路由是否可以处理该 URL。
  • 如果是,它应该触发路由器回调。
  • 如果没有,它应该使用 URL 发起一个新的页面请求。

有任何输入吗?有什么内置的方法可以解决这个问题吗?

谢谢!

最佳答案

您能否关闭 iOS 应用程序的 pushState 使用?我假设用户在应用程序中无论如何都看不到该 url,因此更丑陋的 url 的缺点不适用。因此,不要将 url 更改为/items/3,而是将其更改为 #/items/3。

这意味着需要由 Backbone 处理的更改只会更改哈希,而需要新页面的更改会更改位置。

关于ios - 在 UIWebView 中使用 Backbone.js 路由器和 pushState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930932/

相关文章:

ios - 在 Swift 中使用 EZAudio 框架播放音频文件

ios - 导航栏没有出现?

backbone.js - 有没有办法使用 RequireJS 动态更改 Marionette ItemView 模板?

javascript - Backbone.js - 是否可以为模型定义多个 el 值?

swift - 无法将类型 'NSURL?' 的值转换为预期参数类型 'URL'

ios - 在 uiwebview 上添加事件指示器

objective-c - 在 UIWebview 中添加了空格 - 在 iOS7 和 iOS8 中删除了 UIWebView 空格

ios - 在 UIPageViewController swift 的最后一页隐藏点

ios - 如何使用 Google Analytics 获取 iOS 版本

javascript - Backbone.js 和非模型对象