# 全局WebView访问使用说明 ## 概述 已将`NewwebviewActivity`中的`x5webview`设置为`public static`,使其可以在项目中的任何地方全局访问。 ## 访问方式 ### 方式1:直接访问静态变量 ```java 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:通过静态方法访问 ```java import com.tagmae.tsgame_erwang.NewwebviewActivity; import com.tagmae.jsbridge.BridgeWebView; // 通过静态方法访问 BridgeWebView webView = NewwebviewActivity.getWebView(); if (webView != null) { // 使用webView String currentUrl = webView.getUrl(); } ``` ### 方式3:使用辅助类(推荐) ```java 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数据 ```java 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数据 ```java 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 ```java 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`就可以在整个项目中全局访问了。