2017-03-09 12 views
9

Mamy natywną aplikację ios, która wyświetla widok WWW ze stroną HTML i dwoma elementami iframe. Wewnątrz tych elementów iframe wyświetlamy nasze artykuły z plików HTML znajdujących się w zasobach aplikacji. W artykułach często pojawiają się skrypty javascript, które działają jednocześnie na obu artykułach. Na przykład pogrubienie części tekstu. Aby to zrobić, wyświetla listę wszystkich elementów danej klasy i modyfikuje jej styl CSS.Android WebView - klasy dostępu z jednego elementu iframe wewnątrz innego elementu iframe

$(".question").length() 

zwróci liczbę elementów z klasą .question w obu iframe na iOS, gdzie byłoby wrócić tylko elementy z aktualnej iframe na Androida. Przez "bieżący" mam na myśli ten, z którym użytkownik wchodził w interakcję, aby uruchomić skrypt.

Mamy również obowiązek udostępnienia aplikacji na Androida. Wszystko poszło dobrze, dopóki nie przetestowałem artykułu, w którym javascript musi działać na obu elementach iframe. Niestety, ma dostęp tylko do elementów z jednego elementu iframe.

Czy jest jakiś sposób, abym mógł działać bez zmiany kodu javascripts dołączonego do artykułów? Nie mam w tym żadnej władzy [poza tym, że mogą to być tysiące artykułów z dużą ilością niestandardowych javascriptów do aktualizacji].

Dziękuję

+0

czy obejrzałeś [to] (https://stackoverflow.com/questions/11955413/accessing-elements-of-one-frame-from-another-iframe) i [to] (https: // stackoverflow. com/questions/4132411/how-to-call-a- funkcja-w-an-iframe-from-the-parent-page)? –

+0

Tak, wymagałoby to zmian w treści, których nie mogę zmienić. – Krystian

Odpowiedz

0

W ten sposób udało mi się podobny przypadek

webview.loadDataWithBaseURL("file:///android_asset/", your_html_as_string_here, "text/html", "utf-8", null); 
webview.getSettings().setJavaScriptEnabled(true); // enable javascript 
      webview.addJavascriptInterface(new WebViewJavaScriptInterface(getActivity()), "app"); 

i trzeba utworzyć klasę wewnętrzną i wywołać tę samą funkcję, jak wspomniano w javascript interfejs jako „app.function1”

public class WebViewJavaScriptInterface { 

     private Context context; 

     /* 
     * Need a reference to the context in order to sent a post message l 
     */ 
     public WebViewJavaScriptInterface(Context context) { 
      this.context = context; 
     } 

     /* 
     * This method can be called from Android. @JavascriptInterface 
     * required after SDK version 17. 
     */ 

     @JavascriptInterface 
     public void function1() { 
      ll_translucent.setVisibility(View.VISIBLE); 
     } 

     /* 
       * This method can be called from Android. @JavascriptInterface 
       * required after SDK version 17. 
       */ 
     @JavascriptInterface 
     public void function2() { 
      new CommonActions(getActivity()).showSnackToast(verticalSeekBar, "Purchase Episode to read Further"); 
     } 
    } 
+0

Szczerze nie rozumiem twojego przykładu. Właśnie ładujesz stronę internetową i ujawniasz dwie funkcje interfejsu javascript. W jaki sposób pomaga to w uzyskiwaniu dostępu do treści jednego elementu iframe z innego elementu iframe? – Krystian

Powiązane problemy