出于个人目的,我正在为 Dolphin 浏览器开发一个插件。该应用程序的功能是在我单击网页中的登录按钮时读取网页中的文本框并将其替换为 url。
我尝试使用以下代码在浏览器选项卡的 Iwebview 中运行 java 脚本。
package com.dolphin.rpplugin;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.annotation.Annotation;
import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
import com.dolphin.browser.addons.*;
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends AddonService {
private static String TAG = "MainActivity";
final Handler myHandler = new Handler();
String jscontent = "";
IWebView webView ;
@Override
protected void onBrowserConnected(Browser browser) {
Log.i(TAG, "Browser Started");
try {
browser.addonBarAction.setIcon(BitmapFactory.decodeResource(
getResources(), R.drawable.ic_launcher));
browser.addonBarAction.setTitle("RP Plugin");
//Web view reading
ITab tab = browser.tabs.getCurrent();
if (null == tab) {
return;
}
webView = tab.getWebView();
if (null == webView) {
return;
}
webView.getWebSettings().setJavaScriptEnabled(true);
webView.getWebSettings().setSaveFormData(true);
webView.getWebSettings().setSavePassword(true);
//webView.
browser.addonBarAction.setOnClickListener(new OnClickListener() {
@Override
public void onClick(Browser browser) {
readURL(webView);
}
});
browser.addonBarAction.show();
} catch (Exception e) {
e.printStackTrace();
}
}
@JavascriptInterface
private void readURL(IWebView webView) {
try {
// Get current web page
//browser.
String url = webView.getUrl();
if (url.contains("http://10.1.225.20:8080/Facebook")
|| url.contains("http://10.1.225.20:8080/Amazon")) {
excecuteJavaScript();
/*WebViews webview2 = browser.webViews;
IWebView webview3 = browser.tabs.getCurrent().getWebView();
webview3.loadUrl("javascript:(" + jscontent + ")()");*/
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void excecuteJavaScript() throws RemoteException {
Log.i(TAG, "JavaScript Enabling");
// reading the bootstrap java script file from asset folder.
try {
AssetManager am = getAssets();
InputStream is = am.open("replace.js");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
jscontent += line;
}
is.close();
} catch (Exception e) {
}
webView.loadUrl("javascript:(" + jscontent + ")()");
}
@Override
protected void onBrowserDisconnected(Browser arg0) {
Toast.makeText(MainActivity.this, "Browser Connected",
Toast.LENGTH_LONG).show();
}
}
这是我的 replace.js 文件
function replaceProfile() {
alert("Heai");
var elemArray = document.getElementsByName("openid");
alert("Hello! "+elemArray + " length:"+elemArray.length);
if(elemArray.value == "john"){
elemArray.value = "http://google.com/johnsmith";
}
}
这样我有几个问题:1)java脚本无法通过名称Openid和该文本框中的内容读取元素。2)当我点击插件时,webview.loadUrl()第二次不起作用。
你能建议我如何实施吗?