WebView 및 JavaScript 상호 작용 기본 사항
이 섹션 소개:
이전 섹션에서는 Android의 WebView(웹 보기)를 연구했으며 WebView의 기본 사용법을 이해했다고 생각합니다.
이 섹션에서 배우고 싶은 내용은 다음과 같습니다. HTML -> JS ->Java HTML5 측과 Android 휴대폰 간의 통신을 완료합니다. 방문교환! 자, 더 이상 고민하지 말고 코드를 작성하여 이 미묘한 연결을 경험해 봅시다~
PS: 편의상 이 섹션에서 사용된 HTML은 파일 형식으로 자산 디렉토리에 배치됩니다. loadUrl("file:///android_asset/~")은 해당 HTML을 로드할 수 있습니다~
1. 핵심 단계 설명:
먼저, 데이터를 노출하는 클래스를 정의하고, JS는 메소드를 노출합니다. (Public) Android에 전화하세요!
Next에서는 WebView가 있는 페이지의 활동에서 다음 코드를 사용합니다.
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(object, "name");
예: < input type="button" value="Toast Prompt" onclick="name.showToast('Hehe') ;"/>
또한 setJavaScriptEnabled는 Android 4.4 이전의 시스템
에서만 유효합니다! ! ! 다음 섹션에서는 Android 4.4 이상에 대해 설명하겠습니다.
WebKit 변경 사항과 주의할 점!
1) HTML은 JS
Running 렌더링을 통해 Toast 및 일반 목록의 대화 상자를 표시합니다. 파일을 자산 디렉토리에 배치합니다.demo1.html
:Js调用AndroidObject 개체를 사용자 정의하고 js는 이 클래스에서 노출된 메서드를 통해 Android를 호출합니다.
MyObject.java:
/** * Created by Jay on 2015/9/11 0011. */ public class MyObject { private Context context; public MyObject(Context context) { this.context = context; } //将显示Toast和对话框的方法暴露给JS脚本调用 public void showToast(String name) { Toast.makeText(context, name, Toast.LENGTH_SHORT).show(); } public void showDialog() { new AlertDialog.Builder(context) .setTitle("联系人列表").setIcon(R.mipmap.ic_lion_icon) .setItems(new String[]{"基神", "B神", "曹神", "街神", "翔神"}, null) .setPositiveButton("确定", null).create().show(); } }마지막으로 It
MainActivity.java
이고, JavaScript 지원을 활성화한 다음 addJavascriptInterface를 통해 개체를 노출합니다~public class MainActivity extends AppCompatActivity { private WebView wView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wView = (WebView) findViewById(R.id.wView); wView.loadUrl("file:///android_asset/demo1.html"); WebSettings webSettings = wView.getSettings(); //①设置WebView允许调用js webSettings.setJavaScriptEnabled(true); webSettings.setDefaultTextEncodingName("UTF-8"); //②将object对象暴露给Js,调用addjavascriptInterface wView.addJavascriptInterface(new MyObject(MainActivity.this), "myObj"); } }2) HTML은 JS렌더링 실행
을 통해 세 가지 다른 대화 상자를 호출합니다.
구현 코드
:먼저 html 파일을 자산 디렉토리에 넣으세요:
demo2.html: <meta http-equiv = "Content-Type" content="text/html;charset=UTF-8"
测试Js的三种不同对话框 function alertFun()
{
alert("Alert警告对话框!");
}
function confirmFun()
{
if(confirm("访问百度?"))
{location.href = "http://www.baidu.com";}
else alert("取消访问!");
}
function promptFun()
{
var word = prompt("Prompt对话框","请输入点什么...:");
if(word)
{
alert("你输入了:"+word)
}else{alert("呵呵,你什么都没写!");}
}