2012-01-29 3 views
37

Мое приложение работает в WebView. Он охватывает разные IFRAMES. Оба основных приложения html и iframes html находятся на android_assets. На Android 3.x никаких проблем никогда. То же самое в браузере Chrome и т. Д.WebView на Android ICS, проблемы iframe с android_assets

Если я создаю IFRAME (createElement -> appendChild), создается iframe.

Когда я загружаю в него материал (iframe.src = "url" <> iframe.contentWindow.location.href = "url") ... ЭТО ЗАМЕНЯЕТ ОСНОВНОЕ ПРИМЕНЕНИЕ !! (Вместо загрузки в IFRAME)

Уже попробовал:

  • window.setTimeout задержать загрузку ... не удалось.
  • в WebView, впрыснуть X-Frame-Options = SAME_ORIGIN в качестве заголовка в любой загруженной страницы -> не удалось
  • создания IFRAME, установка песочницы = same_origin, allow_scripts -> не удалось

Кто-нибудь с подобными проблемами? Или может кто-нибудь помочь мне найти документацию об ошибках ICS WebView против Honeycomb?

Также найдено много других странных проблем ... ICS действительно эта ошибка? : S: S

+0

У меня точно такая же проблема с PhoneGap все прекрасно работает с предыдущими версиями Android – nLL

+0

Я думаю ICS переключил компоненты Webkit тем мобильного источника Chrome. (Я заметил, что теперь он использует SPDY, где старый WebView этого не сделал.) Ошибка может быть найдена, если посмотреть на новый источник. – nmr

+1

Прежде всего, в ICS есть массовые изменения в отношении Интернета. Во-вторых, у меня была проблема, но не так, как вы, с моей игрой, которая работала нормально на всех устройствах, кроме тех, кто работает с ICS.Я решил проблему, но не добавлял какие-либо настраиваемые макеты фреймов. Я думаю, вам лучше искать Google, какие изменения они внесли в ICS. Тогда вы найдете решение. –

ответ

2

Sirs, у меня была такая же проблема при использовании Phonegap (Apache Cordova) и IFrames в Android Ice Cream Sandwich (4.0.3).

Чтобы решить эту проблему, мне пришлось отредактировать исходный код Apache Cordova. Я изменил org.apache.cordova. Файл CordovaWebViewClient.java и прокомментировал эту часть кода и включил последнюю строку (return false;).

Так теперь выглядит следующим образом:

// All else 
    //  else { 
    // 
    //   // If our app or file:, then load into a new Cordova webview container by starting a new instance of our activity. 
    //   // Our app continues to run. When BACK is pressed, our app is redisplayed. 
    //   if (url.startsWith("file://") || url.indexOf(this.ctx.baseUrl) == 0 || ctx.isUrlWhiteListed(url)) { 
    //    this.ctx.loadUrl(url); 
    //   } 
    // 
    //   // If not our application, let default viewer handle 
    //   else { 
    //    try { 
    //     Intent intent = new Intent(Intent.ACTION_VIEW); 
    //     intent.setData(Uri.parse(url)); 
    //     ctx.startActivity(intent); 
    //    } catch (android.content.ActivityNotFoundException e) { 
    //     LOG.e(TAG, "Error loading url "+url, e); 
    //    } 
    //   } 
    //  } 
    //  return true; 
    return false; 

Эта проблема возникает только на Android ICS, но я изменил код для всех моих приложений. Я все еще делаю тесты.

В моем анализе кажется, что когда вы пытаетесь загрузить страницу внутри iFrame, Android WebView на ICS интерпретирует ее как новый запрос страницы, а IT ЗАМЕНЯЕТ ОСНОВНОЕ ПРИМЕНЕНИЕ !!, или, другими словами, он ОТКРЫВАЕТ запрашиваемую страницу в родительском окне отверстия.

Я оставил остальную часть кода нетронутой.

Надеюсь, это поможет, как и для меня.

С уважением.

Александр Алмейда

+0

СПАСИБО! Я провел дни по этому вопросу ... – Nadav

+0

Я опоздал на то, чтобы сказать МНОГО СПАСИБО! остановился на некоторое время разработки Android, но мне придется столкнуться с этим вопросом в ближайшее время. – rupps

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