【问题标题】:MonoTouch UIWebView and EvaluateJavascriptMonoTouch UIWebView 和 EvaluateJavascript
【发布时间】:2012-04-10 11:03:24
【问题描述】:

我有一个在以下环境中运行的应用程序:

  • 单点触控 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,有以下问题:当我点击一个按钮在 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 使应用程序崩溃。

【问题讨论】:

  • 您也可以使用:if (UIDevice.CurrentDevice.CheckVersion(5, 0))

标签: javascript ios uiwebview mono xamarin.ios


【解决方案1】:

试试这个:

string error = webView.EvaluateJavascript("try { window.scrollTo(0,0); } catch (e) { return e.message; }");

(仔细检查我的代码)

它应该会为您提供更好的错误消息。告诉我们返回的字符串的值。

我怀疑问题不是 MonoTouch,而是 iOS5? Safari 在 iOS5、新的 javascript 引擎等方面发生了翻天覆地的变化。

【讨论】:

  • 出色的观察力。事实上,在 iOS 4.3 上运行良好,而不是在 iOS 5 上。我已尝试执行您的代码,但没有例外,也没有写在字符串错误上的错误。你觉得怎么解决?
  • 这个问题有几个例子可以满足你的需要:stackoverflow.com/questions/2506958/…。它们在 Objective-C 中,但应该很容易提取 javascript
  • 我以这种方式解决了:我检查了哪个 iOS 正在运行并且我执行了不同的操作。我已经用答案更新了我的问题。
【解决方案2】:

注意UIWebView 不是re-entrant。如果在 iOS 版本之间加载(或只是时间)页面的方式发生了变化,那么这可能会成为一个问题。

为避免这种情况,请确保在加载完成之前您没有回调 any UIWebView 实例,例如LoadFinishedLoadError 被调用。

如果这没有帮助,请创建一个小型、独立的测试用例来复制问题并将其附加到错误报告中,地址为http://bugzilla.xamarin.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多