首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将javascript注入WebChromeClient

将javascript注入WebChromeClient
EN

Stack Overflow用户
提问于 2013-10-29 21:36:59
回答 2查看 3.2K关注 0票数 4

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

默认情况下,WebView不提供类似浏览器的小部件,不启用JavaScript并忽略网页错误。 http://developer.android.com/reference/android/webkit/WebView.html

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

尽管我已经启用了很多内容,但webview不起作用:

代码语言:javascript
复制
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中?或者你还有什么其他的猜测,我可以启用或注入到网络视图吗?

EN

回答 2

Stack Overflow用户

发布于 2013-11-02 00:39:43

首先,您需要使用派生自setWebViewClient的类进行setWebViewClient:

代码语言:javascript
复制
WebView webview = new WebView();
webview.setWebViewClient(new WebClient());
webview.loadUrl("stackoverflow.com");

然后在WebClient中,等待加载页面(onPageFinished)。然后是loadUrl(“javascript :这里的javascript”)。

代码语言:javascript
复制
public class WebClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) 
    {       
        // Obvious next step is: document.forms[0].submit()
        view.loadUrl("javascript:document.forms[0].q.value='[android]'");       
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-05-11 22:44:38

人们记得想要执行不同的JavaScript相关任务,因此需要启用一堆选项,甚至设置浏览器type...here是这些配置选项:

代码语言: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); }
        }

对于与以下相同基本内容一起使用的引用:https://github.com/cprcrack/VideoEnabledWebView/blob/01c7f758a409fabbc501cdf24efdf5b77400280f/app/src/main/java/name/cpr/ExampleActivity.java

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19669659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档