我们有一个 native ios应用程序,该应用程序显示带有HTML网页和两个iframe的Web View 。在这些iframe中,我们显示位于应用程序资源中的HTML文件中的文章。在文章内部,经常有同时在两个文章上同时运行的javascript脚本。例如,将文本的某些部分设为粗体。为此,它将列出具有特定类的所有元素,并修改其CSS样式。

$(".question").length()

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

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

有什么办法可以使它工作而无需更改文章附带的javascript代码?我没有那里的权限[此外,可能有成千上万的文章需要大量自定义javascript进行更新]。

谢谢

最佳答案

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

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接口(interface)中提到的相同的函数“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");
        }
    }

10-07 18:57
查看更多