4.1 KiB
4.1 KiB
全局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) {
// 处理错误
}
});
注意事项
- 空值检查:在使用前务必检查
x5webview是否为null - 线程安全:WebView相关操作需要在主线程中执行
- 生命周期:确保在WebView已经初始化后再使用
- 内存泄漏:由于是静态变量,注意在不需要时适当清理
使用场景示例
在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就可以在整个项目中全局访问了。