|
@@ -1,55 +0,0 @@
|
|
|
-import { WebPlugin } from '@capacitor/core';
|
|
|
-
|
|
|
-// 定义插件
|
|
|
-export class WebOpener extends WebPlugin {
|
|
|
- async open(options) {
|
|
|
- const { url, params = {} } = options;
|
|
|
-
|
|
|
- // 1. 如果是 Web 环境,直接 window.open
|
|
|
- if (this.getPlatform() === 'web') {
|
|
|
- const urlObj = new URL(url);
|
|
|
- Object.entries(params).forEach(([key, value]) => {
|
|
|
- urlObj.searchParams.append(key, value);
|
|
|
- });
|
|
|
- window.open(urlObj.toString(), '_blank');
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 2. 如果是 Android/iOS,注入 JS 参数
|
|
|
- const jsCode = `window.capacitorParams = ${JSON.stringify(params)};`;
|
|
|
-
|
|
|
- try {
|
|
|
- // 在 WebView 中执行 JS(Capacitor 提供的 API)
|
|
|
- await this.evalJs(jsCode);
|
|
|
-
|
|
|
- // 使用 Capacitor 的 Browser 模块打开网页
|
|
|
- const { Browser } = await import('@capacitor/browser');
|
|
|
- await Browser.open({ url });
|
|
|
- } catch (error) {
|
|
|
- console.error('WebOpener 插件出错:', error);
|
|
|
- throw error;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 通用的 JS 代码执行方法(兼容 Android/iOS)
|
|
|
- async evalJs(jsCode) {
|
|
|
- if (window.Capacitor?.Platform === 'android') {
|
|
|
- // Android 方式
|
|
|
- await window.Capacitor.Plugins.WebView.evaluateJavaScript({
|
|
|
- code: jsCode,
|
|
|
- });
|
|
|
- } else if (window.Capacitor?.Platform === 'ios') {
|
|
|
- // iOS 方式
|
|
|
- await window.Capacitor.Plugins.WebView.evaluateJavaScript({
|
|
|
- code: jsCode,
|
|
|
- });
|
|
|
- } else {
|
|
|
- // 其他环境(如测试)
|
|
|
- console.warn('当前环境无法执行 JS 注入:', jsCode);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 注册插件(让 Capacitor 能识别)
|
|
|
-const WebOpener = new WebOpener();
|
|
|
-export { WebOpener };
|