Add webview init
This commit is contained in:
parent
e8089e98a8
commit
780188e145
@ -25,7 +25,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
buildJSBundle.exec()
|
//buildJSBundle.exec()
|
||||||
}
|
}
|
||||||
|
|
||||||
task buildJSBundle(type: Exec) {
|
task buildJSBundle(type: Exec) {
|
||||||
|
@ -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);
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
18
doric-js/bundle/doric-web.js
Normal file
18
doric-js/bundle/doric-web.js
Normal 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
16
doric-js/index.web.ts
Normal 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
0
doric-js/lib/index.web.d.ts
vendored
Normal file
17
doric-js/lib/index.web.js
Normal file
17
doric-js/lib/index.web.js
Normal 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");
|
@ -1,87 +1,105 @@
|
|||||||
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 [
|
||||||
{
|
{
|
||||||
input: "lib/index.runtime.js",
|
input: "lib/index.runtime.js",
|
||||||
output: {
|
output: {
|
||||||
name: "doric",
|
name: "doric",
|
||||||
format: "iife",
|
format: "iife",
|
||||||
file: "bundle/doric-sandbox.js",
|
file: "bundle/doric-sandbox.js",
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve({ mainFields: ["jsnext"] }),
|
|
||||||
],
|
|
||||||
onwarn: function (warning) {
|
|
||||||
if (warning.code === 'THIS_IS_UNDEFINED') { return; }
|
|
||||||
console.warn(warning.message);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
plugins: [resolve({ mainFields: ["jsnext"] })],
|
||||||
input: "lib/index.js",
|
onwarn: function (warning) {
|
||||||
output: {
|
if (warning.code === "THIS_IS_UNDEFINED") {
|
||||||
format: "cjs",
|
return;
|
||||||
file: "bundle/doric-lib.js",
|
}
|
||||||
},
|
console.warn(warning.message);
|
||||||
plugins: [
|
|
||||||
resolve({ mainFields: ["jsnext"] }),
|
|
||||||
],
|
|
||||||
onwarn: function (warning) {
|
|
||||||
if (warning.code === 'THIS_IS_UNDEFINED') { return; }
|
|
||||||
console.warn(warning.message);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
},
|
||||||
input: "lib/index.debug.js",
|
{
|
||||||
output: {
|
input: "lib/index.js",
|
||||||
format: "cjs",
|
output: {
|
||||||
file: "bundle/doric-vm.js",
|
format: "cjs",
|
||||||
},
|
file: "bundle/doric-lib.js",
|
||||||
plugins: [
|
|
||||||
resolve({ mainFields: ["jsnext"] }),
|
|
||||||
],
|
|
||||||
external: ['ws'],
|
|
||||||
onwarn: function (warning) {
|
|
||||||
if (warning.code === 'THIS_IS_UNDEFINED') { return; }
|
|
||||||
console.warn(warning.message);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
plugins: [resolve({ mainFields: ["jsnext"] })],
|
||||||
{
|
onwarn: function (warning) {
|
||||||
input: "lib-es5/index.runtime.es5.js",
|
if (warning.code === "THIS_IS_UNDEFINED") {
|
||||||
output: {
|
return;
|
||||||
name: "doric",
|
}
|
||||||
format: "iife",
|
console.warn(warning.message);
|
||||||
file: "bundle/doric-sandbox.es5.js",
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve({ mainFields: ["jsnext"] }),
|
|
||||||
commonjs(),
|
|
||||||
buble({
|
|
||||||
transforms: { dangerousForOf: true }
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
onwarn: function (warning) {
|
|
||||||
if (warning.code === 'THIS_IS_UNDEFINED') { return; }
|
|
||||||
console.warn(warning.message);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
},
|
||||||
input: "lib-es5/index.js",
|
{
|
||||||
output: {
|
input: "lib/index.debug.js",
|
||||||
format: "cjs",
|
output: {
|
||||||
file: "bundle/doric-lib.es5.js",
|
format: "cjs",
|
||||||
},
|
file: "bundle/doric-vm.js",
|
||||||
plugins: [
|
|
||||||
resolve({ mainFields: ["jsnext"] }),
|
|
||||||
buble({
|
|
||||||
transforms: { dangerousForOf: true }
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
onwarn: function (warning) {
|
|
||||||
if (warning.code === 'THIS_IS_UNDEFINED') { return; }
|
|
||||||
console.warn(warning.message);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
]
|
plugins: [resolve({ mainFields: ["jsnext"] })],
|
||||||
|
external: ["ws"],
|
||||||
|
onwarn: function (warning) {
|
||||||
|
if (warning.code === "THIS_IS_UNDEFINED") {
|
||||||
|
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",
|
||||||
|
output: {
|
||||||
|
name: "doric",
|
||||||
|
format: "iife",
|
||||||
|
file: "bundle/doric-sandbox.es5.js",
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
resolve({ mainFields: ["jsnext"] }),
|
||||||
|
commonjs(),
|
||||||
|
buble({
|
||||||
|
transforms: { dangerousForOf: true },
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
onwarn: function (warning) {
|
||||||
|
if (warning.code === "THIS_IS_UNDEFINED") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.warn(warning.message);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "lib-es5/index.js",
|
||||||
|
output: {
|
||||||
|
format: "cjs",
|
||||||
|
file: "bundle/doric-lib.es5.js",
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
resolve({ mainFields: ["jsnext"] }),
|
||||||
|
buble({
|
||||||
|
transforms: { dangerousForOf: true },
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
onwarn: function (warning) {
|
||||||
|
if (warning.code === "THIS_IS_UNDEFINED") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.warn(warning.message);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
Reference in New Issue
Block a user