当前位置:  开发笔记 > 编程语言 > 正文

如何在android 7中的html加载之前在webview中注入javascript脚本

如何解决《如何在android7中的html加载之前在webview中注入javascript脚本》经验,为你挑选了0个好方法。

我将提出一个我的问题的修改示例来简化这个问题,但我的完整示例的本质是相同的:

我需要在webview中加载一个html代码,这段代码假定要声明一些javascript函数.示例HTML代码:


JavaScript Math.random()

A random number:

在此示例中,代码假定已调用的已声明函数showRandomValue().所以我需要在执行代码之前注入此函数.这是我要注入的功能:


直到现在我在加载webview中的代码之前这样做了:

public static final String JAVASCRIPT_FUNCTION = 
        "javascript:function showRandomValue() {\n" +
        "           document.getElementById(\"demo\").innerHTML = Math.random();\n" +
        "      }";
webView.loadUrl(JAVASCRIPT_FUNCTION);
webView.loadData(HTML_CODE, "text/html", "UTF-8");

这对我很有用,直到我想将targetSdkVersion更新为24.如果我设置targetSdkVersion 24此代码停止工作,因为代码加载时找不到该函数.

修改android WebView文档我发现了这个:

兼容性说明.针对N或更高版本的应用程序,来自空WebView的JavaScript状态不再在loadUrl(String)等导航中保留.例如,在加载的页面中不存在调用loadUrl(String)之前定义的全局变量和函数.应用程序应使用addJavascriptInterface(Object,String)来跨导航持久化JavaScript对象.

我的问题是addJavascriptInterface你可以声明一个自定义对象,所以我可以声明:

webview.addJavascriptInterface(new MyInterface(),"javaInterface");

并在例如中调用其方法javaInterface.getRandomValue().但是我不能用这种方法声明全局函数.

重要提示:我无法编辑或修改HTML代码,因为它来自第三方服务器.

如何让这段代码再次在android 7+中运行?

如果要测试它,这是完整的示例代码:

public class MainActivity extends Activity {

    private WebView webView;
    String HTML_CODE = "\n" +
            "

Hello World

\n" + "

A random number:

\n" + "

\n" + "\n" + "\n" + ""; public static final String JAVASCRIPT_FUNCTION = "(function showRandomValue() {document.getElementById(\"demo\").innerHTML = Math.random();})"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("javascript:" + JAVASCRIPT_FUNCTION); webView.loadData(HTML_CODE, "text/html", "UTF-8"); } }

使用targetSdkVersion 23编译此代码将起作用,而targetSdkVersion 24将无法显示随机数

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有