149 lines
4.1 KiB
Markdown
149 lines
4.1 KiB
Markdown
# 全局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`就可以在整个项目中全局访问了。
|