MonoTouch UIWebView和EvaluateJavascript
我有一个应用程序工作在以下环境:
- Monotouch 2.1
- MonoDevelop 2.4.2
- MacOS 10.6.8
- iOS SDK 4.3
同样的应用程序,迁移到iOS 5.0 / 5.1和Monotouch 5.2.10与MonoDevelop 2.8.8.4下,有以下问题:当我点击一个button导航UIWebView不起作用。
代码是:(显然它在Monotouch 2.1中是一样的)
public void ScrollToTop (object sender, EventArgs evt) { webView.EvaluateJavascript("window.scrollTo(0,0)"); }
我能做什么?
解决(与Jonathan.Peppers帮助):
public void ScrollToTop (object sender, EventArgs evt) { if((UIDevice.CurrentDevice.CheckVersion(5, 0)){ System.Drawing.PointF p = new System.Drawing.PointF(0, 0); webView.ScrollView.SetContentOffset(p,true); } else{ webView.EvaluateJavascript("window.scrollTo(0,0)"); } }
我已经这样做了,因为在4.3 webView.ScrollView.SetContentOffset使应用程序崩溃。
尝试这个:
string error = webView.EvaluateJavascript("try { window.scrollTo(0,0); } catch (e) { return e.message; }");
(仔细检查我的代码)
它应该给你一个更好的错误信息。 告诉我们返回的string的值。
我怀疑这个问题不是MonoTouch,但也许是iOS5? Safari浏览器在iOS5,新的JavaScript引擎等方面发生了巨大的变化
请注意, UIWebView
不可重入 。 如果加载(或只是时间)的页面的方式在iOS版本之间改变,那么这可能成为一个问题。
为了避免这种情况,只要确保在加载完成之前不callback任何 UIWebView
实例,例如LoadFinished
或LoadError
。
如果这没有帮助,那么请创build一个小的,自包含的testing用例,将问题复制并附加到http://bugzilla.xamarin.com上的错误报告