Files
youle_app_android/docs/GLOBAL_WEBVIEW_USAGE.md
2026-02-16 18:18:11 +08:00

4.1 KiB
Raw Permalink Blame History

全局WebView访问使用说明

概述

已将NewwebviewActivity中的x5webview设置为public static,使其可以在项目中的任何地方全局访问。

访问方式

方式1直接访问静态变量

import com.tagmae.tsgame_erwang.NewwebviewActivity;
import com.tagmae.jsbridge.BridgeWebView;

// 直接访问
BridgeWebView webView = NewwebviewActivity.x5webview;
if (webView != null) {
    // 使用webView
    webView.loadUrl("javascript:console.log('Hello from external class')");
}

方式2通过静态方法访问

import com.tagmae.tsgame_erwang.NewwebviewActivity;
import com.tagmae.jsbridge.BridgeWebView;

// 通过静态方法访问
BridgeWebView webView = NewwebviewActivity.getWebView();
if (webView != null) {
    // 使用webView
    String currentUrl = webView.getUrl();
}

方式3使用辅助类推荐

import com.tagmae.tsgame_erwang.GlobalWebViewHelper;
import com.tagmae.tsgame_erwang.WebViewScreenshotUtil;

// 检查WebView是否可用
if (GlobalWebViewHelper.isWebViewAvailable()) {
    // 执行JavaScript
    GlobalWebViewHelper.executeJavaScript("console.log('Hello from helper')");
    
    // 获取当前URL
    String url = GlobalWebViewHelper.getCurrentUrl();
    
    // 重新加载
    GlobalWebViewHelper.reload();
    
    // 获取Canvas base64数据
    GlobalWebViewHelper.getCanvasBase64("myCanvas", new WebViewScreenshotUtil.CanvasToBase64Callback() {
        @Override
        public void onSuccess(String base64Data) {
            // 处理base64数据
            Log.d("Canvas", "Got base64: " + base64Data.length() + " chars");
        }
        
        @Override
        public void onError(String error) {
            Log.e("Canvas", "Failed to get base64: " + error);
        }
    });
}

Canvas截图便捷方法

直接从全局WebView获取Canvas数据

import com.tagmae.tsgame_erwang.WebViewScreenshotUtil;

// 获取指定ID的Canvas
WebViewScreenshotUtil.getCanvasBase64FromGlobalWebView("canvasId", new WebViewScreenshotUtil.CanvasToBase64Callback() {
    @Override
    public void onSuccess(String base64Data) {
        // 处理base64数据
    }
    
    @Override
    public void onError(String error) {
        // 处理错误
    }
});

// 获取第一个Canvas
WebViewScreenshotUtil.getCanvasBase64FromGlobalWebView(new WebViewScreenshotUtil.CanvasToBase64Callback() {
    @Override
    public void onSuccess(String base64Data) {
        // 处理base64数据
    }
    
    @Override
    public void onError(String error) {
        // 处理错误
    }
});

注意事项

  1. 空值检查:在使用前务必检查x5webview是否为null
  2. 线程安全WebView相关操作需要在主线程中执行
  3. 生命周期确保在WebView已经初始化后再使用
  4. 内存泄漏:由于是静态变量,注意在不需要时适当清理

使用场景示例

在Service中获取Canvas数据

public class MyService extends Service {
    public void captureCanvas() {
        if (GlobalWebViewHelper.isWebViewAvailable()) {
            GlobalWebViewHelper.getCanvasBase64(new WebViewScreenshotUtil.CanvasToBase64Callback() {
                @Override
                public void onSuccess(String base64Data) {
                    // 在Service中处理Canvas数据
                    handleCanvasData(base64Data);
                }
                
                @Override
                public void onError(String error) {
                    Log.e("MyService", "Canvas capture failed: " + error);
                }
            });
        }
    }
}

在其他Activity中操作WebView

public class OtherActivity extends Activity {
    public void interactWithWebView() {
        BridgeWebView webView = NewwebviewActivity.getWebView();
        if (webView != null) {
            // 执行JavaScript
            webView.loadUrl("javascript:myFunction()");
            
            // 获取URL
            String url = webView.getUrl();
            Log.d("OtherActivity", "Current URL: " + url);
        }
    }
}

这样,x5webview就可以在整个项目中全局访问了。