【问题标题】:Webview doesn't work well after use javascript使用 javascript 后 Webview 无法正常工作
【发布时间】:2016-10-09 18:48:36
【问题描述】:

我正在构建一个使用 webview 的应用程序。它加载网站的移动版本。但我的客户希望我更改和删除一些文本。 我用 javascript 做到了,但在我这样做之后,一些滑块停止工作了。没有javascript,它可以完美运行。但我必须以某种方式更改和删除文本。

我的网页浏览设置;

wSettings=webView.getSettings();
        wSettings.setJavaScriptEnabled(true);
        wSettings.setDomStorageEnabled(true);
    webView.loadUrl("http://www.evdusum.com");

以及我在 onPageFinished 中使用的 javascript;

@Override
            public void onPageFinished(WebView view, String url) {

                String link1 = "SİTEDE ARAYIN";
                String link2 = "ARA";
                String a="Bu sitede kullanılan yazılı ya da görsel dokümanlar izinsiz kullanılamaz.";
                String b=" ";
                view.loadUrl("javascript:(function(){document.body.innerHTML = document.body.innerHTML.replace('" + link1+"', '" + link2+"')})()");
                view.loadUrl("javascript:(function(){document.body.innerHTML = document.body.innerHTML.replace('" + a+"', '" + b+"')})()");

                ((RelativeLayout)findViewById(R.id.start)).setVisibility(View.GONE);

            }

【问题讨论】:

  • dnt 使用 2 次 view.loadUrl 没有说明。最好的是将你的 javascript 代码写入你的页面,并从 webview 调用你的 javascript
  • @DionisL 我不明白你的意思。我无法编辑此网页,也无法将代码写入此页面。
  • 你可以在google上搜索如何在webview中查看页面源,获取页面源进行修改并再次加载到webview中。更好

标签: javascript android jquery webview


【解决方案1】:

在 Android api 18 (JELLY_BEAN_MR1) 之前,您可以使用此 view.loadUrl("javascript:");。只需使用一次调用即可插入并调用您的 js。如果您需要执行长代码,请构建一个函数并在webView.loadUrl() 的“相同调用”处调用它。

一些例子:

webView.loadUrl("javascript:(function() {" +
    "var parent = document.getElementsByTagName('head').item(0);" +
    "var script = document.createElement('script');" +
    "script.type = 'text/javascript';" +
    "script.innerHTML =  function your_function(var1, var2){document.body.innerHTML = document.body.innerHTML.replace(var1, var2); return true;}" +
    "parent.appendChild(script);" +
    "your_function('"+link1+"','"+link2+"')" + ";})();");

Android api >=19 使用webView.evaluateJavascript。这里有一些例子:

webView.evaluateJavascript("(function() {" +
        "var parent = document.getElementsByTagName('head').item(0);" +
        "var script = document.createElement('script');" +
        "script.type = 'text/javascript';" +
        "script.innerHTML =  function your_function(var1, var2){document.body.innerHTML = document.body.innerHTML.replace(var1, var2); return true;}" +
        "parent.appendChild(script);" +
        "return your_function('"+link1+"','"+link2+"');})();", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String value) {
        Log.v("TAG", "Response from JS"+value)
    }
});

【讨论】:

  • 谢谢,但我检查了构建版本并仅使用了一个 loadUrl("");这对我不起作用。
  • 在普通浏览器上试过你自己的例子吗?我的意思是,把它放到一个 html 页面中并运行?它工作正常吗?
猜你喜欢
  • 1970-01-01
  • 2017-03-16
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多