document.getElementsByName 在 android 的 webview 中无法在某些网站上工作
document.getElementsByName NOT working in some websites in webview in android
我构建新的 android 应用程序并使用 java 脚本语法 document.getElementsByName('') 在网页的输入字段中插入值。但在我在 android studio
的 Web 视图中加载它的某些网页中不起作用
这里是代码
webCollection =(WebView)findViewById(R.id.webCollection);
webCollection.getSettings().setJavaScriptEnabled(true);
webCollection.getSettings().setDomStorageEnabled(true);
webCollection.loadUrl("mywepSite");
webCollection.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:(function(){document.getElementsByName('j_username')[0].value='myUser';document.getElementsByName('j_password')[0].value='MyPassword';document.getElementsByTagName('form')[0]();})()");
}
});
}
});
这里是输入框
<input name="j_username" tabindex="1" class="form-control input-lg margin-bottom" id="j_username" spellcheck="false" type="text" size="15" autocapitalize="off" autocorrect="off" autocomplete="off" data-required="Please enter required fields.">
<input name="j_password" tabindex="1" class="form-control input-lg margin-bottom" id="j_password" spellcheck="false" type="text" size="15" autocapitalize="off" autocorrect="off" autocomplete="off" data-required="Please enter required fields.">
那是因为您正在访问内部 class 中的局部变量。只需将 webCollection 设置为最终版本即可。
final WebView webCollection =(WebView)findViewById(R.id.webCollection);
任何在内部 class 中使用但未声明的局部变量必须在内部 class 的主体之前明确赋值。
还要检查清单中的权限
<uses-permission android:name="android.permission.INTERNET" />
Java 语言规范中的解释,https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.3
这是一个有效的class,可以成功加载 webview
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.annotation.TargetApi;
public class Main extends Activity {
private WebView mWebview ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebview = new WebView(this);
mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript
final Activity activity = this;
mWebview.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
// Redirect to deprecated method, so you can use it in all SDK versions
onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
}
});
mWebview .loadUrl("http://www.google.com");
setContentView(mWebview );
}
}
不要忘记添加权限
<uses-permission `android:name="android.permission.INTERNET" />
webCollection.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
view.loadUrl("javascript:(function(){document.getElementsByName('j_username')
[0].value='myUser';document.getElementsByName('j_password')
[0].value='myPassword';document.getElementsByTagName('form')[0]();})()");
}
});
我构建新的 android 应用程序并使用 java 脚本语法 document.getElementsByName('') 在网页的输入字段中插入值。但在我在 android studio
的 Web 视图中加载它的某些网页中不起作用这里是代码
webCollection =(WebView)findViewById(R.id.webCollection);
webCollection.getSettings().setJavaScriptEnabled(true);
webCollection.getSettings().setDomStorageEnabled(true);
webCollection.loadUrl("mywepSite");
webCollection.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:(function(){document.getElementsByName('j_username')[0].value='myUser';document.getElementsByName('j_password')[0].value='MyPassword';document.getElementsByTagName('form')[0]();})()");
}
});
}
});
这里是输入框
<input name="j_username" tabindex="1" class="form-control input-lg margin-bottom" id="j_username" spellcheck="false" type="text" size="15" autocapitalize="off" autocorrect="off" autocomplete="off" data-required="Please enter required fields.">
<input name="j_password" tabindex="1" class="form-control input-lg margin-bottom" id="j_password" spellcheck="false" type="text" size="15" autocapitalize="off" autocorrect="off" autocomplete="off" data-required="Please enter required fields.">
那是因为您正在访问内部 class 中的局部变量。只需将 webCollection 设置为最终版本即可。
final WebView webCollection =(WebView)findViewById(R.id.webCollection);
任何在内部 class 中使用但未声明的局部变量必须在内部 class 的主体之前明确赋值。
还要检查清单中的权限
<uses-permission android:name="android.permission.INTERNET" />
Java 语言规范中的解释,https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.3
这是一个有效的class,可以成功加载 webview
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.annotation.TargetApi;
public class Main extends Activity {
private WebView mWebview ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebview = new WebView(this);
mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript
final Activity activity = this;
mWebview.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
// Redirect to deprecated method, so you can use it in all SDK versions
onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
}
});
mWebview .loadUrl("http://www.google.com");
setContentView(mWebview );
}
}
不要忘记添加权限
<uses-permission `android:name="android.permission.INTERNET" />
webCollection.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
view.loadUrl("javascript:(function(){document.getElementsByName('j_username')
[0].value='myUser';document.getElementsByName('j_password')
[0].value='myPassword';document.getElementsByTagName('form')[0]();})()");
}
});