2017-03-09 136 views
9

我們有一個本機ios應用程序,它顯示帶有HTML網頁和兩個iframe的網頁視圖。在這些iframe中,我們從位於應用程序資源中的HTML文件中顯示文章。在文章裏面,經常有JavaScript腳本同時在兩篇文章上操作。例如,使文本的某個部分變爲粗體。爲此,它會列出具有特定類的所有元素並修改其CSS樣式。Android WebView - 從另一個iframe中的一個iframe訪問類

$(".question").length() 

將返回在iOS上,無論是內部框架與.question類元素的數量哪裏會只在Android返回從目前的iframe元素。 「當前」是指用戶與之進行交互以啓動腳本的人。

我們有一個要求也發佈一個android應用程序。 這一切都很順利,直到我測試了一篇文章,其中JavaScript必須對兩個iframe都進行操作。不幸的是,它只能從一個iframe訪問元素。

有沒有什麼辦法可以讓它工作而不改變附加到文章的JavaScript代碼?我在那裏沒有權力[除了它可能是數以千計的文章與大量的自定義JavaScript更新]。

謝謝

+0

你看過[this](https://stackoverflow.com/questions/11955413/accessing-elements-of-one-iframe-from-another-iframe)和[this](https:// stackoverflow。 COM /問題/ 4132411 /如何對呼叫A-功能在-AN-iframe的來自該父頁)? –

+0

是的,這將需要改變我無法改變的內容。 – Krystian

回答

0

這是我如何管理一個類似的案件

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"); 

,並必須創建一個內部類,並調用相同的功能中提到的JavaScript界面​​「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

我真的不明白你的例子。你只是加載一個網頁並暴露兩個JavaScript接口函數。這如何幫助從另一個iframe訪問一個iframe的內容? – Krystian