Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将javascript注入WebChromeClient_Javascript_Android_Webview - Fatal编程技术网

将javascript注入WebChromeClient

将javascript注入WebChromeClient,javascript,android,webview,Javascript,Android,Webview,我知道,你可以将javascript注入Android网络视图。我已经做到了。但是,我加载了一个html5/javascript web应用程序(不是我自己的,所以我无法访问代码),我需要注入额外的javascript。但此web应用程序在标准WebView中无法正常工作。原因可能是: “默认情况下,WebView不提供类似浏览器的小部件,不启用JavaScript,网页错误将被忽略。” 所以,我启用了Javascript,但这可能是因为它忽略了网页错误。然而,在普通的Chrome浏览器中,一

我知道,你可以将javascript注入Android网络视图。我已经做到了。但是,我加载了一个html5/javascript web应用程序(不是我自己的,所以我无法访问代码),我需要注入额外的javascript。但此web应用程序在标准WebView中无法正常工作。原因可能是:

“默认情况下,WebView不提供类似浏览器的小部件,不启用JavaScript,网页错误将被忽略。”

所以,我启用了Javascript,但这可能是因为它忽略了网页错误。然而,在普通的Chrome浏览器中,一切都可以正常工作,没有任何问题

虽然我已经启用了很多功能,但webview不起作用:

webView = (WebView) findViewById( R.id.webView );
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setPluginState(PluginState.ON);
    webView.getSettings().setDomStorageEnabled(true);
    webView.setBackgroundColor(0x00000000);
    webView.setWebChromeClient( new WebChromeClient() );
    webView.setWebViewClient( new WebViewListener() );
    CookieManager.getInstance().setAcceptCookie(true);
那么,是否有可能将javascript注入到普通WebChromeClient中?
或者您是否有其他猜测,我还可以启用或注入到webview中什么?

首先,您需要使用从WebViewClient派生的类设置WebViewClient:

WebView webview = new WebView();
webview.setWebViewClient(new WebClient());
webview.loadUrl("stackoverflow.com");
然后在WebClient中,等待页面加载(onPageFinished)。然后加载URL(“javascript:[您的javascript在此]”)


记住,它需要执行不同的JavaScript相关任务,因此需要启用一系列选项,甚至设置浏览器类型……以下是这些配置选项:

        webView.setWebChromeClient(webChromeClient);

        webView.setWebViewClient(new InsideWebViewClient(getBaseContext(), webView));

        WebSettings settings = webView.getSettings();
        settings.setAllowUniversalAccessFromFileURLs(true);
        settings.setBuiltInZoomControls(false);
        settings.setUseWideViewPort(true);
        settings.setJavaScriptEnabled(true);
        settings.setSupportMultipleWindows(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setLoadsImagesAutomatically(true);
        settings.setDomStorageEnabled(true);
        settings.setLoadWithOverviewMode(true);
        settings.setMediaPlaybackRequiresUserGesture(false);
        // Call private class InsideWebViewClient
        settings.setPluginState(WebSettings.PluginState.ON);
        settings.setAllowFileAccess(true);
//        settings.setUserAgentString("Mozilla/5.0");
        settings.setUserAgentString("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36");
//        webView.setInitialScale(50);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (0 != (getApplicationContext().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE))
            { webView.setWebContentsDebuggingEnabled(true); }
        }
供参考,与以下相同的基本内容一起使用:

您需要解释它到底是如何不起作用的。另请参阅这可能有助于拨打您的电话。谢谢。如果你仔细查看我上面的代码,你会发现我实际上已经做到了。但是,它不起作用,因为webview不是完全兼容的浏览器。我的问题是:“将javascript注入WebChromeClient”,而不是WebViewClient。梅比,你应该先看看我的问题。因此-1
        webView.setWebChromeClient(webChromeClient);

        webView.setWebViewClient(new InsideWebViewClient(getBaseContext(), webView));

        WebSettings settings = webView.getSettings();
        settings.setAllowUniversalAccessFromFileURLs(true);
        settings.setBuiltInZoomControls(false);
        settings.setUseWideViewPort(true);
        settings.setJavaScriptEnabled(true);
        settings.setSupportMultipleWindows(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setLoadsImagesAutomatically(true);
        settings.setDomStorageEnabled(true);
        settings.setLoadWithOverviewMode(true);
        settings.setMediaPlaybackRequiresUserGesture(false);
        // Call private class InsideWebViewClient
        settings.setPluginState(WebSettings.PluginState.ON);
        settings.setAllowFileAccess(true);
//        settings.setUserAgentString("Mozilla/5.0");
        settings.setUserAgentString("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36");
//        webView.setInitialScale(50);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (0 != (getApplicationContext().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE))
            { webView.setWebContentsDebuggingEnabled(true); }
        }