Android WebView在加载html之前注入Javascript
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android WebView在加载html之前注入Javascript相关的知识,希望对你有一定的参考价值。
我正在使用android WebView加载一些网页。我需要在加载之前向所有页面插入一段javascript代码。
我试图在WebViewClient onPageStart回调上注入它们。
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
loadUrl("javascript:var output='test string';");
}
})
mWebView.loadUrl("xxx.html");
HTML代码:
<html>
<script>document.write(output);</script>
</html>
我希望在HTML之前加载My Js代码。但有时在HTML之后加载JS代码。
有什么办法可以解决我的问题吗?
我有同样的问题,我解决了它。我在加载之前隐藏WebView
并在页面加载后显示。
webView.getSettings().setJavaScriptEnabled(true);
b.webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
b.webView.evaluateJavascript("javascript:window.document.getElementsByTagName('body')[0].style.color='white';", null);
}
else
{
b.webView.loadUrl("javascript:window.document.getElementsByTagName('body')[0].style.color='white';");
}
b.webView.setVisibility(View.VISIBLE);
}
});
b.webView.setVisibility(View.INVISIBLE);
b.webView.loadUrl(PreferenceHelper.EULA_URL);
如何通过javascript加载您的页面?
在您的资产中创建一个空白的html页面,其中包括您的脚本和这个小函数(我在这里使用jquery是为了简单起见,但您可以使用另一个框架或根本不使用框架)。
window.loadPage = function (url) {
$.get(url, function(page) {
$('html').replace(page);
});
};
然后,在你的Android应用程序上:
mWebView.loadUrl("javascript: loadPage('xxx.html')");
注意:我没有注意到xxx.html也可能在您的资产中,而不是在某个Web服务器中,在这种情况下,出于安全原因,ajax查询将失败,但您可以忘记ajax请求,在String中读取html页面从你的Android应用程序,并将其作为参数传递给略微修改的javascript函数。
你可以在页面加载之前注入你的javascript,如下所示:
val mimeType = "text/html"
val encoding = "utf-8"
val injection = "<script type='text/javascript'>
//Your JavaScript code here
//**This line is important**
"window.location.replace('ACTUAL_URL');</script>"
webView.loadDataWithBaseURL('ANY_DUMMY_URL', injection, mimeType, encoding, null)
ACTUAL_URL应该是您实际要加载的URL。 DUMMY_URL可以是任何URL,最好与ACTUAL_URL保持一致。
你可以尝试把你的java脚本放在html页面里然后使用android java脚本函数调用可能会有所帮助
一种方法,也许不是最简单的方法是使用HttpClient自己从Web服务器读取数据,然后修改它并使用它将其设置为webview
webview.loadData(mydata, "text/html", null);
我会使用Phonegap和JavaScript界面的组合。
在主要的.java文件中,在OnCreate()中包括:
super.appView.addJavascriptInterface(new Object()
{
public void setOutput()
{
// here the body of your method in Android
}
}, "myInterface");
然后,在.js文件中,包含这个(你必须在同一个文件中导入Phonegap,显然,要捕获onDeviceReady方法):
function onDeviceReady() {
myInterface.setOutput();
}
这将在设备准备就绪时,在应用程序启动的第一个时刻从JavaScript触发您的方法。
您可以使用
webView.addJavascriptInterface("test string", "output");
在加载网页之前注入所需的对象。
以上是关于Android WebView在加载html之前注入Javascript的主要内容,如果未能解决你的问题,请参考以下文章
在 WebView 中加载页面之前,用本地 Android 资源替换 HTML 文档的图像
有没有办法在android上有一个webview,我可以在页面加载之前注入css?
android webView 当用loadDataWithBaseURL加载本地html时如何实现后退到上一页面
在我的 Webview 在 Android Webview App 中加载之前获取白页