Android WebView - 从另一个 iframe 中的一个 iframe 访问类

Posted

技术标签:

【中文标题】Android WebView - 从另一个 iframe 中的一个 iframe 访问类【英文标题】:Android WebView - access classes from one iframe inside another iframe 【发布时间】:2017-07-30 15:01:51 【问题描述】:

我们有一个原生 ios 应用程序,它显示一个带有 html 网页和两个 iframe 的 web 视图。在这些 iframe 中,我们从位于应用程序资源中的 HTML 文件中显示我们的文章。在文章中,经常有javascript脚本同时对两篇文章进行操作。例如,将文本的某些部分加粗。为此,它会列出具有特定类的所有元素并修改其 CSS 样式。

$(".question").length()

将在 iOS 上的两个 iframe 中返回类 .question 的元素数量,而它只会返回 android 上当前 iframe 中的元素。 “当前”是指用户与之交互以启动脚本的那个。

我们还需要发布一个 Android 应用程序。 一切都很顺利,直到我测试了一篇文章,其中 javascript 必须在两个 iframe 上运行。不幸的是,它只能从一个 iframe 访问元素。

有什么方法可以在不更改附加到文章的 javascripts 代码的情况下使其工作?我在那里没有权限[除了可能有数千篇文章需要更新大量自定义 javascript]。

谢谢

【问题讨论】:

你看过this和this吗? 是的,需要更改内容,我没办法更改。 【参考方案1】:

这就是我处理类似案例的方式

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

【讨论】:

我真的不明白你的例子。您只是在加载一个网页并公开两个 javascript 接口函数。这对从另一个 iframe 访问一个 iframe 的内容有何帮助?

以上是关于Android WebView - 从另一个 iframe 中的一个 iframe 访问类的主要内容,如果未能解决你的问题,请参考以下文章

从另一个类Swift调用一个类的函数

WebView 数据缓存 (Android)

Webview背景设置透明(ios android)

Android WebView 重定向问题

android WebView音频关闭的问题

android中webview与js交互