注入javascript文件到我的网站在android的web视图 [英] Inject javascript file to my site with webview in android
问题描述
我要注入的JavaScript
文件到我的网站。我的网站是一个简单的 HTML
是在服务器上的页面。我注入了 CSS
文件。 (与Manish的帮助)
所以我可以管理我的简单 HTML
站点 CSS
现在。但我想用 JavaScript来管理它
太。我的 jscript.js
文件在资产
文件夹中。我想有我的网站上的JavaScript
的完全访问权限。 (请记住,这是我的地盘)。请写出正确的codeS我。 Thankx。
下面是我的 MainActivity.java
文件:
包com.example.z5070.myapplication;进口android.support.v7.app.ActionBarActivity;
进口android.os.Bundle;
进口android.util.Base64;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.webkit.WebSettings;
进口android.webkit.WebView;
进口android.webkit.WebViewClient;
进口的java.io.InputStream;
公共类MainActivity扩展ActionBarActivity { web视图的WebView; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
web视图=新的WebView(本);
的setContentView(web视图);
webView.getSettings()setJavaScriptEnabled(真)。
webView.setWebViewClient(新WebViewClient(){ @覆盖
公共无效onPageFinished(的WebView视图,字符串URL){
injectCSS();
super.onPageFinished(查看,网址);
}
});
webView.loadUrl(http://www.example.com/);
}
私人无效injectCSS(){
尝试{
为InputStream的InputStream = getAssets()开(style.css文件)。
字节[]缓冲区=新的字节[inputStream.available()];
inputStream.read(缓冲液);
inputStream.close();
字符串连接codeD = Base64.en codeToString(缓冲,Base64.NO_WRAP);
webView.loadUrl(JavaScript的:(函数(){+
VAR父= document.getElementsByTagName(头)项目(0); +
VAR风格=使用document.createElement('风格'); +
style.type ='文/ CSS'; +
style.innerHTML = window.atob('+ EN codeD +'); +
parent.appendChild(样式)+
})());
}赶上(例外五){
e.printStackTrace();
}
} @覆盖
公共布尔onCreateOptionsMenu(菜单菜单){ 。getMenuInflater()膨胀(R.menu.menu_main,菜单);
返回true;
} @覆盖
公共布尔onOptionsItemSelected(菜单项项){
INT ID = item.getItemId();
如果(ID == R.id.action_settings){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
添加到注入的JavaScript文件的新方法。
私人无效injectJS(){
尝试{
为InputStream的InputStream = getAssets()开(jscript.js);
字节[]缓冲区=新的字节[inputStream.available()];
inputStream.read(缓冲液);
inputStream.close();
字符串连接codeD = Base64.en codeToString(缓冲,Base64.NO_WRAP);
webView.loadUrl(JavaScript的:(函数(){+
VAR父= document.getElementsByTagName(头)项目(0); +
VAR脚本=使用document.createElement('脚本'); +
script.type =文/ JavaScript的; +
script.innerHTML = window.atob('+ EN codeD +'); +
parent.appendChild(脚本)+
})());
}赶上(例外五){
e.printStackTrace();
}
}
通话两种方法:injectCSS()和injectJS()网页加载完成后,
webView.setWebViewClient(新WebViewClient(){ @覆盖
公共无效onPageFinished(的WebView视图,字符串URL){
injectCSS();
injectJS();
super.onPageFinished(查看,网址);
}
});
我希望这能解决这个问题。
警惕注射js文件会表现中定义如何的onload事件。
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)
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.
Here is my MainActivity.java
file:
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);
}
}
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();
}
}
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);
}
});
I hope this solves the problem.
Be wary of how onload events defined inside inject js file would behave.
这篇关于注入javascript文件到我的网站在android的web视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!