A. 如何設置WebView支持js的Alert,Confirm,Prompt函數的彈出提示框
默認情況下,Android WebView是不支持js的Alert(),Confirm(),Prompt()函數的彈出提示框的.即使設置了setjavaScriptEnabled(true);也是沒用的.那麼,如何才能讓WebView可以支持js的這3個函數呢.可以通過設置WebChromeClient對象來完成.WebChromeClient主要輔助WebView處理Javascript的對話框、網站圖標、網站title、載入進度等等.
這里主要重寫WebChromeClient的3個方法:
onJsAlert :警告框(WebView上alert無效,需要定製WebChromeClient處理彈出)
onJsPrompt : 提示框.
onJsConfirm : 確定框.
效果圖分別為:
1.Alert
2.Prompt
3.Confirm
先來看看js的頁面代碼:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<script type="text/javascript">
function call(){
var value = document.getElementById("input").value;
alert(value);
}
//警告
function onAlert(){
alert("This is a alert sample from html");
}
//確定
function onConfirm(){
var b = confirm("are you sure to login?");
alert("your choice is "+b);
}
//提示
function onPrompt(){
var b = prompt("please input your password","aaa");
alert("your input is "+b);
}
</script>
</head>
<body>
<input type="text" id="input" value="default"/>
<button onclick=call()>點我彈出Alert</button></br>
<input type="button" value="alert" onclick="onAlert()"/></br>
<input type="button" value="confirm" onclick="onConfirm()"/></br>
<input type="button" value="prompt" onclick="onPrompt()"/></br>
</body>
</html>
Android代碼:
package com.example.chenys.webviewdemo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.TextView;
/**
* Created by mChenys on 2015/11/19.
*/
public class TestAlertActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
setContentView(webView);
webView.requestFocus();
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);//啟用支持js
//設置響應js 的Alert()函數
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);
b.setTitle("Alert");
b.setMessage(message);
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
b.setCancelable(false);
b.create().show();
return true;
}
//設置響應js 的Confirm()函數
@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);
b.setTitle("Confirm");
b.setMessage(message);
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
b.create().show();
return true;
}
//設置響應js 的Prompt()函數
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {
final View v = View.inflate(TestAlertActivity.this, R.layout.prompt_dialog, null);
((TextView) v.findViewById(R.id.prompt_message_text)).setText(message);
((EditText) v.findViewById(R.id.prompt_input_field)).setText(defaultValue);
AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);
b.setTitle("Prompt");
b.setView(v);
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String value = ((EditText) v.findViewById(R.id.prompt_input_field)).getText().toString();
result.confirm(value);
}
});
b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
b.create().show();
return true;
}
});
webView.loadUrl("file:///android_asset/index3.html");
}
}
有2個需要注意的:
1.重寫onJsPrompt 方法,需要我們自定一個提示的布局文件,如下:prompt_dialog.xml
就是一個提示的TextView和輸入文本的EditTex而已.
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/prompt_message_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/prompt_input_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minWidth="250dp"
android:selectAllOnFocus="true"
android:scrollHorizontally="true"/>
</LinearLayout>
2.WebView需要支持js的話,要記得加啟用js的支持.
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
B. 用js(最好jQuery) 重寫confirm方法【js高手請進】
$.confirm = function(msg,func1,func2,w,h) { Confirm(msg,func1,func2,w,h); };
function Confirm(msg,func1,func2,w,h){
var opts = {css:{width:w?w:300,height:h?h:120}};
//這里還可以判斷msg的長度進行排版,並調整彈出框的大小
install(window.top, opts);
$.DialogData.dialogDiv.find("div[id^='_DialogButtons_']").css('text-align','center')
var win = topWin.$.DialogData.iframeObj.attr('contentWindow');
var doc = win.document;
doc.open();
doc.write("<body></body>") ;
var arr = [];
arr.push("<div><table height='100%' border='0' align='center' cellpadding='10' cellspacing='0'>");
arr.push("<tr><td align='center'><img id='Icon' src='../images/icon_query.gif' width='34' height='34' align='absmiddle'></td>");
arr.push("<td align='left' id='Message' style='font-size:9pt'>"+msg+"</td></tr></table></div>");
var div = $(arr.join(''),doc.body);
$(doc.body).append(div);
doc.close();
//設置響應函數
//如果傳遞響應函數則執行,否則僅關閉窗口
$.DialogData.dialogDiv.find("input[id^='_ButtonOK_']").bind("click", function() {
$.unfunkyUI();
if(func1){
func1();
}
})
$.DialogData.dialogDiv.find("input[id^='_ButtonCancel_']").bind("click", function() {
if(func2){
func2();
}
}) ;
}
})(jQuery);
C. 如何重寫 alert,confirm,prompt-CSDN論壇
這個Jquery插件的目的是替代JavaScript的標准函數alert(),confirm(),和 prompt()。這個插件有如下這些特點:
1:這個插件可以使你可以支持你自己的css制定。使你的網站看起來更專業。
2:允許你自定義對話框的標題。
3:在IE7中,可以使你避免使用JavaScript 的prompt()函數帶來的頁面重新載入。
4:這些方法都模擬了Windows的模式對話框。在你改變改變瀏覽器窗口大小時候,它能夠自適應用戶
窗口的調整。
5:如果你引入了jQuery UI Draggable plugin插件,那這個插件也可以被自由拖動。
jquery.alerts.js代碼:
// Download by http://keleyi.com
// 由 柯樂義 改進改插件,使插件適用於新版的jquery(比如1.10.1) 版本
// Visit http://keleyi.com/a/bjac/no0m3cb1.htm for more information
//
// Usage:
// jAlert( message, [title, callback] )
D. CSS+JS更改alert的默認對話框
functionalert(){
document.getElementById('alertBox').style.display="unset";
return;
}
然後自己設定id=alertBox的樣式即可(劇中代碼內:)容
#alertBox{
position:fixed;
left:50%;
top:50%;
transform:translate(-50%,-50%);
z-index:999;
}
E. 如何修改由JS彈出的網頁對話框標題
JS中alert樣式為瀏覽器內置設定,標題及顏色等是無法修改的。
如果因為網站的需要,需要修改標題或者樣式等,一般解決方案是使用DOM模擬彈出
F. js,怎麼修改alert彈窗的「確定或取消」這兩個文字
你無法改變alert的這個特徵, 因為它是瀏覽器底層實現的, 並且沒有開放介面
如果你確實想定製彈出提示框則需要使用各種插件或自己寫
G. 如何重寫js的alert方法
window.alert=function(msg){
//addyourcodehere
}
H. js中如何自定義alert
重寫alert方法
function alert(str){
// do sth...
}
I. JS彈窗問題 alert()
這是自己手動寫的隱藏域,中中JS觸發賦值提示信息以及icon進行顯示,當然你也可以用彈窗,不過alert實現不了,你可以用layer的彈窗,layer.msg()效果差不多,當然老培肢樣式你可以自定義修改侍世它的css文件,改成圖片的樣式
J. js中用alert沒有顯示提示。
returnfalse;這個放在alert("對不起,用戶名太短啦!")下面,注意放在大括弧裡面
2.alert("對不起,用戶名太短啦!")後面缺少;號
3.<input type="text"/>修改成<input type="text" id="username"/>