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

149 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 全局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`就可以在整个项目中全局访问了。