使用 android 中的 webview 将 javascript 文件注入我的网站 [英] Inject javascript file to my site with webview in android
问题描述
我想将 javascript
文件注入我的网站.我的网站是服务器上的一个简单的 html
页面.我已经注入了 css
文件.(在 Manish 的帮助下)
I want to inject javascript
file to my site. My site is a simple html
page that is on server. I have injected css
file. (with Manish's help)
所以我现在可以使用 CSS
管理我简单的 html
站点.但我也想用 javascript
来管理它.我的 jscript.js
文件位于 asset
文件夹中.我想在我的网站上完全访问 javascript
.(请记住,这是我的网站).请为我写正确的代码.谢谢x.
So I can manage my simple html
site with CSS
now. But I want to manage it with javascript
too. My jscript.js
file is in asset
folder. I want to have full access of javascript
on my site. (Remember that, it is MY site) . please write the correct codes for me. Thankx.
这是我的 MainActivity.java
文件:
package com.example.z5070.myapplication;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.io.InputStream;
public class MainActivity extends ActionBarActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = new WebView(this);
setContentView(webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
injectCSS();
super.onPageFinished(view, url);
}
});
webView.loadUrl("http://www.example.com/");
}
private void injectCSS() {
try {
InputStream inputStream = getAssets().open("style.css");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
webView.loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var style = document.createElement('style');" +
"style.type = 'text/css';" +
"style.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(style)" +
"})()");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
推荐答案
添加一个新的方法来注入 javascript 文件.
Add a new method to inject javascript file.
private void injectJS() {
try {
InputStream inputStream = getAssets().open("jscript.js");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
webView.loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var script = document.createElement('script');" +
"script.type = 'text/javascript';" +
"script.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(script)" +
"})()");
} catch (Exception e) {
e.printStackTrace();
}
}
页面加载完成后调用两个方法:injectCSS()和injectJS().
Call both methods: injectCSS() and injectJS() after page finishes loading.
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
injectCSS();
injectJS();
super.onPageFinished(view, url);
}
});
我希望这能解决问题.
注意在注入 js 文件中定义的 onload 事件的行为.
Be wary of how onload events defined inside inject js file would behave.
这篇关于使用 android 中的 webview 将 javascript 文件注入我的网站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!