Inject javascript into WebChromeClient
Inject javascript into WebChromeClient
我知道,你可以将javascript注入Android WebView。我已经这样做了。但是,我加载了一个html5/javascript Web应用程序(不是我自己的,所以我无法访问代码),我需要注入额外的javascript。但是此 Web 应用程序在标准 Web 视图中无法正常工作。其原因可能是:
"默认情况下,WebView不提供类似浏览器的小部件,不启用JavaScript,并且忽略网页错误。
http://developer.android.com/reference/android/webkit/WebView.html
所以,我启用了Javascript,但这可能是因为它忽略了网页错误。但是,在普通的Chrome浏览器中,一切正常,没有任何问题。
尽管我已经启用了很多东西,但网络视图不起作用:
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中?或者您还有其他猜测我还可以启用或注入到网络视图中的内容吗?
首先,您需要使用从 WebViewClient 派生的类来设置 WebViewClient:
WebView webview = new WebView();
webview.setWebViewClient(new WebClient());
webview.loadUrl("stackoverflow.com");
然后在WebClient中,等待页面加载(onPageDone)。然后你加载Url("javascript:[your javascript here]")。
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]'");
}
}
记得想要执行不同的 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
- Javascript inject CSS into Swift WebView
- NodeJS中的MySQL不适用于INSERT INTO中的多个语句
- Injecting JQuery into Android Webview
- MD5.ComputeHash(Encoding.Unicode.GetBytes(value)) into javas
- Inject javascript into WebChromeClient
- Embede IPythonNotebook into iframe
- mongodb import xml into mongodb
- ExtJs Grid into a BufferedGrid
- WebChromeClient onJsAlert接收未定义的消息
- Javascript into PHP foreach loop
- Inject Javascript into DOM
- "$75.00" into "75.00" JQuery or Javascri
- javascript var into onClick in html
- 我们可以使用Jquery或Javascript从/Into.js文件中读取/写入Json数据吗
- JavaScript into jQuery Convert
- PHP Mysql Insert Into不起作用,没有错误,没有数据发布到数据库,早些时候同一页面也起作用
- Javascript injected into URL
- 选择INTO数组或对象
- javascript传递into对象方法
- Inject Angular into Rails