部分修改 备份

This commit is contained in:
WoNiu 2024-04-02 11:02:06 +08:00
parent bda8bb5570
commit b6a1e84658
5 changed files with 135 additions and 49 deletions

View File

@ -1,19 +1,50 @@
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:web_synchronization_tool/main_page.dart';
import 'package:web_synchronization_tool/windows/windows_main_page.dart'; import 'package:web_synchronization_tool/windows/windows_main_page.dart';
import 'package:webview_windows/webview_windows.dart'; import 'package:window_manager/window_manager.dart';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
// await InAppWebViewController.setWebContentsDebuggingEnabled(true); WindowOptions windowOptions = const WindowOptions(
center: true, backgroundColor: Colors.white,// fullScreen: true,//, title: '赢佳'
// skipTaskbar: true, //,
// titleBarStyle: TitleBarStyle.hidden, //
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
runApp(const MyApp()); runApp(const MyApp());
} }
class MyApp extends StatelessWidget { class MyApp extends StatefulWidget {
const MyApp({super.key}); const MyApp({super.key});
// This widget is the root of your application. @override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
//
windowManager.setResizable(false);
const double width = 1920;
const double height = 1000;
//
const windowSize = Size(width, height);
windowManager.setSize(windowSize);
appWindow.minSize = windowSize;
windowManager.center();
windowManager.focus();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(

View File

@ -0,0 +1,29 @@
import 'dart:ffi';
import 'package:web_synchronization_tool/windows/windowsJs.dart';
import 'package:webview_windows/webview_windows.dart';
class SynchronizationWebTool{
///
late WebviewController mainController;
///
List<WebviewController> childController = [];
///
clickSynchronization(double x,double y){
for (var controller in childController) {
controller.executeScript(WindowsJs.clickJs(x, y));
}
}
///
input(int value){
mainController.executeScript(WindowsJs.inputJs(value));
for (var controller in childController) {
controller.executeScript(WindowsJs.inputJs(value));
}
}
}

View File

@ -1,56 +1,81 @@
class WindowsJs { class WindowsJs {
/// ///
static String clickEventJs = ''' static String clickEventJs = '''
document.addEventListener('click', function(event) { document.addEventListener("click", function (event) {
var x = event.clientX; var x = event.clientX;
var y = event.clientY; var y = event.clientY;
var value = {"x":x,"y":y}; var click = { 'x': x, 'y': y };
window.chrome.webview.postMessage(value); // var value = { click: click };
// 'btn' //
if (event.target.classList.contains('btn')) { window.chrome.webview.postMessage(click);
// 'btn'
if (event.target.classList.contains("btn")) {
// //
var buttonText = event.target.innerText; var buttonText = event.target.innerText;
var btn = {"x":"成功获取到btn","y":buttonText}; if (buttonText == "进入游戏") {
window.chrome.webview.postMessage(btn); var btn = { x: "成功获取到btn", y: buttonText };
window.chrome.webview.postMessage(btn);
//
event.preventDefault(); //
event.preventDefault();
//
window.location.href = "http://www.df6831.com/game/"; var newUrl = this.href; //
//
// window.location.href = "http://www.df6831.com/game/";
window.location.href = newUrl;
window.chrome.webview.postMessage({url:newUrl}});
}
} }
});
});'''; ''';
/// ///
static String clickJs(int x, int y) { static String clickJs(double x, double y) {
return 'document.elementFromPoint($x, $y).click();'; return 'document.elementFromPoint($x, $y).click();';
} }
/// ///
static String inputJsString(int value) { static String inputJs(int value) {
return ''' return '''
var inputEvent = new Event('input', { var inputEvent = new Event('input', {
bubbles: true, bubbles: true,
cancelable: true, cancelable: true,
}); });
var inputElement = document.querySelector(".input"); var inputElement = document.querySelector(".bet-money");
inputElement.value = "$value"; inputElement.value = "$value";
inputElement.dispatchEvent(inputEvent); inputElement.dispatchEvent(inputEvent);
'''; ''';
} }
static String zoom(int zoom){
assert(zoom >= 1 && zoom <= 100, 'zoom 1 到 100'); ///
static String onloadScale(int scale){
assert(scale >= 1 && scale <= 100, 'zoom 1 到 100');
return ''' return '''
// document.body.style.zoom = "$zoom%"; window.onload = function () {
// 0.550%
document.body.style.transformOrigin = 'top left';
document.body.style.transform = 'scale(${scale / 100})';
};
''';
}
///
static String scale(int scale){
assert(scale >= 1 && scale <= 100, 'zoom 1 到 100');
return '''
// document.body.style.zoom = "$scale%";
document.body.style.transformOrigin = 'top left'; document.body.style.transformOrigin = 'top left';
document.body.style.transform = 'scale(${zoom / 100})'; document.body.style.transform = 'scale(${scale / 100})';
'''; ''';
} }
static String message = 'window.chrome.webview.postMessage({x:3333}});';
} }

View File

@ -3,8 +3,6 @@ import 'package:web_synchronization_tool/windows/windowsJs.dart';
import 'windows_web_page.dart'; import 'windows_web_page.dart';
import 'package:webview_windows/webview_windows.dart'; import 'package:webview_windows/webview_windows.dart';
import '../JavaScriptString.dart';
class WindowsPage extends StatefulWidget { class WindowsPage extends StatefulWidget {
const WindowsPage({super.key}); const WindowsPage({super.key});
@ -30,10 +28,6 @@ class _WindowsPageState extends State<WindowsPage> {
await mainController.initialize(); await mainController.initialize();
await controller.initialize(); await controller.initialize();
mainController.clearCache();
mainController.clearCookies();
controller.clearCache();
controller.clearCookies();
mainController.loadUrl('http://www.df6831.com/'); mainController.loadUrl('http://www.df6831.com/');
controller.loadUrl('http://www.df6831.com/'); controller.loadUrl('http://www.df6831.com/');
@ -49,7 +43,7 @@ class _WindowsPageState extends State<WindowsPage> {
/// ///
mainController.webMessage.listen((event) { mainController.webMessage.listen((event) {
print('mainController listen -- $event'); print('mainController listen -- $event');
controller.executeScript(WindowsJs.clickJs(event['x'], event['y'])); // controller.executeScript(WindowsJs.clickJs(event['x'], event['y']));
}); });
/// ///
@ -61,8 +55,10 @@ class _WindowsPageState extends State<WindowsPage> {
} }
/// ///
addClickEventJS() { addClickEventJS() async {
mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); ScriptID? scriptId = await mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
// mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadScale(70));
// mainController.removeScriptToExecuteOnDocumentCreated(scriptId?? '');
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
} }
@ -87,8 +83,8 @@ class _WindowsPageState extends State<WindowsPage> {
child: const Text('模拟点击测试')), child: const Text('模拟点击测试')),
TextButton( TextButton(
onPressed: () { onPressed: () {
mainController.executeScript(WindowsJs.inputJsString(45)); mainController.executeScript(WindowsJs.inputJs(45));
controller.executeScript(WindowsJs.inputJsString(45)); controller.executeScript(WindowsJs.inputJs(45));
}, },
child: const Text('模拟输入测试')), child: const Text('模拟输入测试')),
TextButton( TextButton(
@ -98,8 +94,8 @@ class _WindowsPageState extends State<WindowsPage> {
child: const Text('跳转首页')), child: const Text('跳转首页')),
TextButton( TextButton(
onPressed: () { onPressed: () {
mainController.executeScript(WindowsJs.zoom(70)); mainController.executeScript(WindowsJs.scale(70));
controller.executeScript(WindowsJs.zoom(40)); controller.executeScript(WindowsJs.scale(40));
}, },
child: const Text('缩放')), child: const Text('缩放')),
TextButton( TextButton(
@ -113,7 +109,11 @@ class _WindowsPageState extends State<WindowsPage> {
mainController.clearCache(); mainController.clearCache();
}, },
child: const Text('清除缓存')), child: const Text('清除缓存')),
TextButton(
onPressed: () {
mainController.executeScript(WindowsJs.message);
},
child: const Text('发送消息')),
], ],
), ),
), ),
@ -128,14 +128,14 @@ class _WindowsPageState extends State<WindowsPage> {
return Row( return Row(
children: [ children: [
SizedBox( SizedBox(
width: 1000, width: 1350,
height: 1000, height: 1000,
child: WindowsWebWidget( child: WindowsWebWidget(
controller: mainController, controller: mainController,
), ),
), ),
SizedBox( SizedBox(
width: 500, width: 550,
height:400, height:400,
child: WindowsWebWidget( child: WindowsWebWidget(
controller: controller, controller: controller,

View File

@ -14,7 +14,8 @@ dependencies:
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
webview_windows: webview_windows:
path: ../flutter-webview-windows-main path: ../flutter-webview-windows-main
window_manager: bitsdojo_window: ^0.1.6
window_manager: ^0.3.7
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: