2017-03-09 139 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