2012-04-10 4 views
2

У меня есть приложение, работающее на следующей envirnoment: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, имеет следующую проблему: при i clic k a кнопка для навигации в 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 сделать сбой приложения.

+1

Вы также можете использовать: 'если (UIDevice.CurrentDevice.CheckVersion (5, 0)) ' – jonathanpeppers

+0

Ответьте на обновление! ;) –

ответ

2

Попробуйте это:

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

(дважды проверьте мой код)

Это вы должны получить лучшее сообщение об ошибке. Сообщите нам значение возвращаемой строки.

Я подозреваю, что проблема не в MonoTouch, а, возможно, в iOS5? В Safari произошли кардинальные изменения в iOS5, новом javascript-двигателе и т. Д.

+0

Отличное наблюдение. На самом деле на iOS 4.3 работает нормально, а на iOS 5 нет. Я попытался выполнить ваш код, но исключений нет, и ошибок в строке не было. Как вы думаете, что может решить? –

+0

В этом вопросе есть несколько примеров, которые могут сделать то, что вам нужно: http://stackoverflow.com/questions/2506958/how-to-find-in-javascript-the-current-scroll-offset-in-mobile-safari- Iphon. Они находятся в Objective-C, но должны быть легко вытащить javascript – jonathanpeppers

+0

. Я решил так: у меня есть проверка iOS, и я выполняю другую операцию. Я обновляю свой вопрос с ответом. –

2

Отметьте, что UIWebView не re-entrant. Если способ загрузки (или просто времени) страницы изменяется между выпуском iOS, это может стать проблемой.

Чтобы избежать этого, просто убедитесь, что вы не звоните в любойUIWebView экземпляр до завершения загрузки, например. LoadFinished или LoadError.

Если это не помогает, то, пожалуйста, создать небольшой, автономный, тест, который дублирует вопрос и прикрепить его к сообщению об ошибке на http://bugzilla.xamarin.com

Смежные вопросы