GVKun编程网logo

Android WebView始终在loadUrl上为javascript getElementById返回null(webview.loadurl)

23

在本文中,我们将详细介绍AndroidWebView始终在loadUrl上为javascriptgetElementById返回null的各个方面,并为您提供关于webview.loadurl的相关解

在本文中,我们将详细介绍Android WebView始终在loadUrl上为javascript getElementById返回null的各个方面,并为您提供关于webview.loadurl的相关解答,同时,我们也将为您带来关于Android 4.0 WebView.loadURL奇怪、Android findViewById返回NULL、Android Javascript WebView、android webview javascript无法使用loadDataWithBaseUrl的有用知识。

本文目录一览:

Android WebView始终在loadUrl上为javascript getElementById返回null(webview.loadurl)

Android WebView始终在loadUrl上为javascript getElementById返回null(webview.loadurl)

我尝试在android客户端应用程序的webview中填写表格。我知道它应该如何工作,但是getElementById总是为我返回null。我在其他网站上尝试过。

这是我针对www.google.com的示例。

MyWebView view = new MyWebView(this);view.getSettings().setJavaScriptEnabled(true);view.loadUrl("http://www.google.com");view.setWebViewClient(new WebViewClient() {    @Override    public boolean shouldOverrideUrlLoading(WebView v, String url) {        v.loadUrl(url);        return true;    }    @Override    public void onPageFinished(WebView v, String url) {        v.loadUrl("javascript:document.getElementById(''mib'').value = ''aaa'';");                  }});setContentView(view);

还有MyWebView类(仅供参考)。

class MyWebView extends WebView {    Context context;    public MyWebView(Context context) {        super(context);        this.context = context;    }    @Override    public boolean onTouchEvent(MotionEvent event) {        // do some multi touch stuff        return true;    }}

我总是得到错误:

09-01 04:35:26.453: I/chromium(2962): [INFO:CONSOLE(1)] "Uncaught TypeError: Cannot set property ''value'' of null", source: https://www.google.de/?gws_rd=ssl (1)

但是元素“ mib”应该在站点上。使用桌面浏览器(带有移动模拟功能的Chrome),一切正常。我不知道,这是怎么回事。

谢谢提示!

编辑:我取得了一些进展。关于此站点,我还需要setDomStorageEnabled(true)。不,我可以找到DOM对象并设置值,但是我没有显示修改的站点,而是获得了一个仅包含我设置的值的新空白站点。例如,带有文本“
aaa”的白色空白站点。

答案1

小编典典

终于我找到了解决方案!这是一个非常奇怪的行为。

首先,您需要在Web视图上指定setDomStorageEnabled(true)。否则,DOM将无法正常工作。我不知道为什么没有教程给出任何提示。但是没问题。

myview.getSettings().setDomStorageEnabled(true);

此后,我进入了白色空白页,仅包含我设置的值。奇怪的是,它javascript:document.getElementById(''myfield'').value= ''aaa'';返回一个值。即我设定的那个。因此,创建了一个仅包含字符串“ aaa”的新空白页。

我通过修改javascript丢弃了返回结果来解决了这个问题:

javascript:var x = document.getElementById(''myfield'').value = ''aaa'';

和瞧。这是工作。

Android 4.0 WebView.loadURL奇怪

Android 4.0 WebView.loadURL奇怪

我有一个Android应用程序,其中包含一个名为“
帮助”的活动,该活动使用WebView以HTML格式显示帮助内容。活动可以通过两种方式调用:传递URL或直接文本内容。我唯一要传递给它的URL是“
file:///android_asset/help/index.html”(这是我的APK资产中包含的HTML页面)。

在运行Android 2.2的HTC Desire上,传递URL可以正常工作。它似乎也可以在运行Android
3.0的模拟器中工作。但是,当我在装有Android
4.0的仿真器中尝试使用它时,似乎尝试改为启动Web浏览器以显示空白页面。当我关闭它时,我又回到了“帮助”活动中,并且还显示了一个空白页。

在我尝试过的所有版本上,传递直接文本内容都可以正常工作。该网页视图文档中说“需要注意的是,为了让您的活动来访问互联网和负载的网页在网页视图,你必须添加INTERNET权限到你的Android清单文件:”但我没有需要访问互联网正因为如此,我只想显示我的应用程序内部帮助页面。这适用于4.0之前的Android版本。

这是Android 4中的错误吗?还是只是我误会了?谢谢你的帮助。

答案1

小编典典

上周,我将HTC Sensation从2.3.4更新为4.0。我写的两个应用程序有一个本地HTML-
Contact网站。在2.3上运行良好,现在我获得了“网页不可用”网站。

我在此站点的评论中找到了另一条帖子:“通过与Google工程师进行的一些讨论,他们似乎已经决定file://方案是不安全的。”

Android findViewById返回NULL

Android findViewById返回NULL

有时我的xml视图有一个奇怪的问题,并且包含在Android Eclipse SDK中的子元素.

例如,我有一个名为main.xml的xml视图,其中的LinearLayout和TextView是唯一的子级,其ID为textView1.一切正常(长时间).当进行一些主要的代码更改时,可能会发生findViewById(R.id.textView1);开始返回null.重新编译不会改变任何东西.真奇怪

一段时间后,我找到了一种解决方法…我将main.xml复制到main2.xml,并将setContentView(R.layout.main)更改为setContentView(R.layout.main2),并且一切正常,g继续进行,没有任何改变布局参考,甚至仅复制布局本身.没有内容被修改.在第一次运行之后,我可以删除main2.xml并将布局设置回R.layout.main.没有更多的NullPointerException.

有人知道发生了什么问题以及如何在不执行愚蠢的复制操作的情况下解决此问题吗?

最好,
哈克牛排

解决方法:

如果Eclipse有问题(例如强制关闭),这恰好发生在我身上.它对我有用的是清理项目,直到获得所有资源和引用为止.

Android Javascript WebView

Android Javascript WebView

我有一个应用程序,我的最小API是16,我想在网页视图上评估一些 JavaScript,当我有

mWebView.evaluateJavascript("(function()...)");

我得到一个编译错误,说这只在API 19及更高版本中可用,所以如何在Web视图中为19以下的API评估javascript,我在API 19及更高版本的if语句中有以上代码,但怎么能我在19以下的API中这样做?

谢谢您的帮助

解决方法

在API 19之前,您必须使用 WebView.loadUrl()和javaScript协议来评估当前加载页面中的JavaScript:

String javaScript = // Some JavaScript code here

if (Build.VERSION.SDK_INT >= 19) {
    mWebView.evaluateJavascript(javaScript,null);
} else {
    mWebView.loadUrl("javascript:" + javaScript);
}

android webview javascript无法使用loadDataWithBaseUrl

android webview javascript无法使用loadDataWithBaseUrl

我正在尝试将数据加载到 android webview中

webview.loadDataWithBaseURL("",htmlcontent,"text/html",null,"");

一个方法从StringBuilder返回htmlContent,它填充html数据.

我启用了javascript并设置了webChromeClient,如下所示

webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.addJavascriptInterface(new JSClass(),"Android");

我的javascript界面​​:

class JSClass {
    public void getHTMLContent(String html)
    {
        Log.i(Global.TAG,"HTMLContentReceived: "+html);
    }
}

和我在html页面的javascript:

<script type="text/javascript">
    var ele = document.getElementsByClassName(''test'');
    for(var i=0;i<ele.length;i++){
        ele[i].onclick = function(){
            window.Android.getHTMLContent(this.innerHTML);
        }
    }
</script>

但不知何故,javascript没有返回任何值.
它适用于loadData(url),其中url是assets文件夹中的简单网页

请帮忙
提前致谢

解决方法

您没有任何baseURL可供使用,因为您正在加载动态生成的HTML.
出于这个原因webview.loadData(htmlcontent,“text / html”,null);应该绰绰有余.

Javascripts不会在Java代码中抛出任何异常.请记住,JS不像Java代码那样类型安全/严格…我的做法是在敏感的Javascript调用之间放置日志,以查看该行是否通过并检查值.由于您没有提供HTML,我将设置WebChomeClient并覆盖onConsoleMessage:

webview.setWebChromeClient(new MyChromeClient());

private class MyChromeClient extends WebChromeClient {
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            String message = consoleMessage.message() + " -- line " + consoleMessage.lineNumber();
            switch (consoleMessage.messageLevel()) {
            case ERROR:
                logErrorMessage(message);
                break;
            default:
                logInfoMessage(message);
                break;
            }
            return true;
        }

        private void logInfoMessage(String message) {
            Log.i("JSTag",message);
        }

        private void logErrorMessage(String message) {
            Log.e("JSTag",message);
        }


    }

然后从您的JavaScript中调用例如:console.log(‘check my value:''(ele!= null)).有关此here的更多信息.

看看你的JavaScript代码,我无法理解this.innerHTML的内容.

今天关于Android WebView始终在loadUrl上为javascript getElementById返回nullwebview.loadurl的介绍到此结束,谢谢您的阅读,有关Android 4.0 WebView.loadURL奇怪、Android findViewById返回NULL、Android Javascript WebView、android webview javascript无法使用loadDataWithBaseUrl等更多相关知识的信息可以在本站进行查询。

本文标签: