3

我的应用程序有一个 UIWebView 组件,它使用“webView:shouldStartLoadWithRequest:navigationType:”调用 Obj-c 函数,我在这里解析请求,然后调用所需的 Obj-c 代码。

我接下来想做的是将一个值返回给 Webview .. 例如状态、消息等。

目前我已经尝试了许多解决方案,但似乎没有任何效果。我现在不发布代码,因为它足够基本。

值得一提的尝试是使用“stringByEvaluatingJavascriptFromString”,它会在 UIWebView 页面中设置全局变量。然后我尝试运行一个无限循环(有超时),以观察全局变量的变化。然后 Javascript 会知道响应已从 Objective-c 函数返回。这似乎不起作用,因为“无限循环”似乎没有阻塞 javascript 线程。

有没有人遇到过这个问题。

看起来有一个函数“windowScriptObject”可以让我直接访问 UIWebViews 脚本对象。可惜它在 iOS 中不可用,是否有人知道解决方法。现在正在研究它..

谢谢。

4

2 回答 2

0

关于 OS X 的文章在这里

webView:shouldStartLoadWithRequest:navigationType:在加载 web 视图的内容之前调用,因此不会加载脚本对象。当委托接收到webView:didClearWindowObject:forFrame:消息时,脚本对象将被加载,然后您可以开始使用[scriptObject evaluateWebScript: @"alert('hello')"]来评估 javascript 并设置全局变量。我认为您的问题是正在加载的脚本对象和您的回调之间存在竞争条件,等待脚本对象应该可以解决问题。

于 2011-06-22T13:41:08.680 回答
0

所以我决定走回调路线。

我将调用在 Obj-C 中执行 JS 代码,然后在浏览器中什么也不做。下一段代码将在从 Objective-c 调用的回调函数中执行,所有的工作都完成了。

于 2011-06-23T08:24:21.517 回答