crosswalk---android和JS互相调用

1.

JS调用android
对象映射 

Java映射代码

public class MainActivity extends Activity{
    XWalkView xWalkView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        XWalkPreferences.setValue("enable-javascript", true);

        xWalkView = findViewById(R.id.web);
        xWalkView.addJavascriptInterface(this, "android");
        xWalkView.loadUrl("file:///android_asset/index.html");
    }
	
	@org.xwalk.core.JavascriptInterface
    public void test(String JSResult) {
        Log.e("JavascriptHandler", "html content:" + JSResult);
    }
}

JS中可以直接使用

android.test("这是在JS中调用函数");
回调拦截 url   
回调拦截JS对话框

1. JS中执行代码

promptResult = prompt("js://serverAddr?currServerAddr=调用clickprompt&arg2=222", "这是传入android的默认参数");

2. android中的处理过程

  如: https://www.cnblogs.com/liuyj-vv/p/9662047.html 中的prompt监听

注:使用中android中未执行 result.confirmWithResult(); 时,JS中的定时器将停止工作。

 android中

 执行JS

 
loadUrl()
xWalkView.loadUrl("javascript:document.getElementsByTagName(\"body\")[0].innerHTML=\"android中改变了H5\"");

  直接在android中执行JS代码后,页面仅仅显示 “android中改变了H5”

evaluateJavascript()
JS代码
function testCalls()
{
	return "JS中返回的字符串"
}

 android代码

xWalkView.evaluateJavascript("javascript:testCalls();", new ValueCallback() {
    @Override
    public void onReceiveValue(String s) {
        Log.e("evaluateJavascript", s);
    }
});

 查看结果:logcat -c && logcat  *:E

 

转载于:https://www.cnblogs.com/liuyj-vv/p/9674050.html

你可能感兴趣的:(移动开发,java,javascript)