Add webview init

This commit is contained in:
pengfei.zhou 2021-11-04 18:50:32 +08:00 committed by osborn
parent e8089e98a8
commit 780188e145
8 changed files with 186 additions and 84 deletions

View File

@ -25,7 +25,7 @@ android {
} }
afterEvaluate { afterEvaluate {
buildJSBundle.exec() //buildJSBundle.exec()
} }
task buildJSBundle(type: Exec) { task buildJSBundle(type: Exec) {

View File

@ -96,7 +96,7 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
} }
protected void initJSEngine() { protected void initJSEngine() {
mDoricJSE = new DoricNativeJSExecutor(); mDoricJSE = new DoricWebViewJSExecutor(Doric.application());
} }
public void setEnvironmentValue(Map<String, Object> values) { public void setEnvironmentValue(Map<String, Object> values) {
@ -239,6 +239,9 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
private void initDoricRuntime() { private void initDoricRuntime() {
try { try {
if (mDoricJSE instanceof DoricWebViewJSExecutor) {
loadBuiltinJS("doric-web.js");
}
loadBuiltinJS(DoricConstant.DORIC_BUNDLE_SANDBOX); loadBuiltinJS(DoricConstant.DORIC_BUNDLE_SANDBOX);
String libName = DoricConstant.DORIC_MODULE_LIB; String libName = DoricConstant.DORIC_MODULE_LIB;
String libJS = DoricUtils.readAssetFile(DoricConstant.DORIC_BUNDLE_LIB); String libJS = DoricUtils.readAssetFile(DoricConstant.DORIC_BUNDLE_LIB);

View File

@ -17,7 +17,11 @@ package pub.doric.engine;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import com.github.pengfeizhou.jscore.JSDecoder; import com.github.pengfeizhou.jscore.JSDecoder;
@ -25,6 +29,8 @@ import com.github.pengfeizhou.jscore.JSRuntimeException;
import com.github.pengfeizhou.jscore.JavaFunction; import com.github.pengfeizhou.jscore.JavaFunction;
import com.github.pengfeizhou.jscore.JavaValue; import com.github.pengfeizhou.jscore.JavaValue;
import pub.doric.utils.DoricLog;
/** /**
* @Description: This contains a webView which is used for executing JavaScript * @Description: This contains a webView which is used for executing JavaScript
@ -41,10 +47,34 @@ public class DoricWebViewJSExecutor implements IDoricJSE {
} }
} }
@SuppressLint("JavascriptInterface") private static class DoricWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
ConsoleMessage.MessageLevel messageLevel = consoleMessage.messageLevel();
if (messageLevel == ConsoleMessage.MessageLevel.ERROR) {
DoricLog.e(consoleMessage.message());
} else if (messageLevel == ConsoleMessage.MessageLevel.WARNING) {
DoricLog.w(consoleMessage.message());
} else {
DoricLog.d(consoleMessage.message());
}
return true;
}
}
@SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled"})
public DoricWebViewJSExecutor(Context context) { public DoricWebViewJSExecutor(Context context) {
this.webView = new WebView(context.getApplicationContext()); this.webView = new WebView(context.getApplicationContext());
this.webView.loadUrl("about:blank"); WebSettings webSettings = this.webView.getSettings();
webSettings.setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new DoricWebChromeClient());
this.webView.loadUrl("https://m.baidu.com");
this.webView.loadUrl("javascript:alert(\"11111\")");
WebViewCallback webViewCallback = new WebViewCallback(); WebViewCallback webViewCallback = new WebViewCallback();
this.webView.addJavascriptInterface(webViewCallback, "callNative"); this.webView.addJavascriptInterface(webViewCallback, "callNative");
} }

View File

@ -0,0 +1,18 @@
'use strict';
/*
* Copyright [2021] [Doric.Pub]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
console.log("Hello,WebView");

16
doric-js/index.web.ts Normal file
View File

@ -0,0 +1,16 @@
/*
* Copyright [2021] [Doric.Pub]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
console.log("Hello,WebView")

0
doric-js/lib/index.web.d.ts vendored Normal file
View File

17
doric-js/lib/index.web.js Normal file
View File

@ -0,0 +1,17 @@
"use strict";
/*
* Copyright [2021] [Doric.Pub]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
console.log("Hello,WebView");

View File

@ -1,6 +1,6 @@
import resolve from '@rollup/plugin-node-resolve' import resolve from "@rollup/plugin-node-resolve";
import buble from '@rollup/plugin-buble'; import buble from "@rollup/plugin-buble";
import commonjs from '@rollup/plugin-commonjs' import commonjs from "@rollup/plugin-commonjs";
export default [ export default [
{ {
@ -10,13 +10,13 @@ export default [
format: "iife", format: "iife",
file: "bundle/doric-sandbox.js", file: "bundle/doric-sandbox.js",
}, },
plugins: [ plugins: [resolve({ mainFields: ["jsnext"] })],
resolve({ mainFields: ["jsnext"] }),
],
onwarn: function (warning) { onwarn: function (warning) {
if (warning.code === 'THIS_IS_UNDEFINED') { return; } if (warning.code === "THIS_IS_UNDEFINED") {
console.warn(warning.message); return;
} }
console.warn(warning.message);
},
}, },
{ {
input: "lib/index.js", input: "lib/index.js",
@ -24,13 +24,13 @@ export default [
format: "cjs", format: "cjs",
file: "bundle/doric-lib.js", file: "bundle/doric-lib.js",
}, },
plugins: [ plugins: [resolve({ mainFields: ["jsnext"] })],
resolve({ mainFields: ["jsnext"] }),
],
onwarn: function (warning) { onwarn: function (warning) {
if (warning.code === 'THIS_IS_UNDEFINED') { return; } if (warning.code === "THIS_IS_UNDEFINED") {
console.warn(warning.message); return;
} }
console.warn(warning.message);
},
}, },
{ {
input: "lib/index.debug.js", input: "lib/index.debug.js",
@ -38,16 +38,30 @@ export default [
format: "cjs", format: "cjs",
file: "bundle/doric-vm.js", file: "bundle/doric-vm.js",
}, },
plugins: [ plugins: [resolve({ mainFields: ["jsnext"] })],
resolve({ mainFields: ["jsnext"] }), external: ["ws"],
],
external: ['ws'],
onwarn: function (warning) { onwarn: function (warning) {
if (warning.code === 'THIS_IS_UNDEFINED') { return; } if (warning.code === "THIS_IS_UNDEFINED") {
console.warn(warning.message); return;
} }
console.warn(warning.message);
},
},
{
input: "lib/index.web.js",
output: {
format: "cjs",
file: "bundle/doric-web.js",
},
plugins: [resolve({ mainFields: ["jsnext"] })],
external: ["ws"],
onwarn: function (warning) {
if (warning.code === "THIS_IS_UNDEFINED") {
return;
}
console.warn(warning.message);
},
}, },
{ {
input: "lib-es5/index.runtime.es5.js", input: "lib-es5/index.runtime.es5.js",
output: { output: {
@ -59,13 +73,15 @@ export default [
resolve({ mainFields: ["jsnext"] }), resolve({ mainFields: ["jsnext"] }),
commonjs(), commonjs(),
buble({ buble({
transforms: { dangerousForOf: true } transforms: { dangerousForOf: true },
}), }),
], ],
onwarn: function (warning) { onwarn: function (warning) {
if (warning.code === 'THIS_IS_UNDEFINED') { return; } if (warning.code === "THIS_IS_UNDEFINED") {
console.warn(warning.message); return;
} }
console.warn(warning.message);
},
}, },
{ {
input: "lib-es5/index.js", input: "lib-es5/index.js",
@ -76,12 +92,14 @@ export default [
plugins: [ plugins: [
resolve({ mainFields: ["jsnext"] }), resolve({ mainFields: ["jsnext"] }),
buble({ buble({
transforms: { dangerousForOf: true } transforms: { dangerousForOf: true },
}), }),
], ],
onwarn: function (warning) { onwarn: function (warning) {
if (warning.code === 'THIS_IS_UNDEFINED') { return; } if (warning.code === "THIS_IS_UNDEFINED") {
console.warn(warning.message); return;
} }
console.warn(warning.message);
}, },
] },
];