1 界面跳转

2 网址输入
3 注入 js 的部分修改
This commit is contained in:
WoNiu 2024-04-03 12:54:07 +08:00
parent 67be45e447
commit 6474edc27e
4 changed files with 128 additions and 109 deletions

View File

@ -24,6 +24,7 @@ class SynchronizationWebTool{
/// ///
List<WebviewController> _childControllers = []; List<WebviewController> _childControllers = [];
/// js
setChildController(List<WebviewController> childControllers){ setChildController(List<WebviewController> childControllers){
for (var controller in childControllers) { for (var controller in childControllers) {
@ -35,10 +36,14 @@ class SynchronizationWebTool{
_childControllers = childControllers.sublist(1,10); _childControllers = childControllers.sublist(1,10);
// //
mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.scrollEventJs); // mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.scrollEventJs);
mainController.webMessage.listen((event) { mainController.webMessage.listen((event) {
print('mainController listen -- $event'); print('mainController listen --');
if (event['scroll'] != null ) {
print(event);
}
if (!webSync) return; if (!webSync) return;
@ -51,6 +56,7 @@ class SynchronizationWebTool{
} }
if (event['scroll'] != null ) { if (event['scroll'] != null ) {
print(event);
int y = event['y'] as int; int y = event['y'] as int;
scrollSynchronization(y); scrollSynchronization(y);
} }

View File

@ -36,12 +36,13 @@ class _WebGridWidgetState extends State<WebGridWidget> {
controllerInit(); controllerInit();
} }
///
Future controllerInit() async { Future controllerInit() async {
for (var i = 0; i< 10 ; i++) { for (var i = 0; i< 10 ; i++) {
var controller = WebviewController(); var controller = WebviewController();
await controller.initialize(); await controller.initialize();
controller.loadUrl('http://www.df6831.com/'); controller.loadUrl('https://www.df6831.com/');
// controller.executeScript(WindowsJs.zoom(35)); // controller.executeScript(WindowsJs.zoom(35));
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(35)); // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(35));
@ -86,7 +87,7 @@ class _WebGridWidgetState extends State<WebGridWidget> {
Navigator.of(context).push(PageRouteBuilder( Navigator.of(context).push(PageRouteBuilder(
opaque: false, // opaque: false, //
pageBuilder: (BuildContext context, _, __) => ShowWebWidget(controller: controller,), pageBuilder: (BuildContext context, _, __) => ShowWebWidget(controller: controller,main: index == 0,),
)); ));
}, },
@ -101,26 +102,98 @@ class _WebGridWidgetState extends State<WebGridWidget> {
} }
class ShowWebWidget extends StatelessWidget { class ShowWebWidget extends StatefulWidget {
const ShowWebWidget({super.key, required this.controller}); const ShowWebWidget({super.key, required this.controller, this.main = false});
final WebviewController controller; final WebviewController controller;
final bool main;
@override
State<ShowWebWidget> createState() => _ShowWebWidgetState();
}
class _ShowWebWidgetState extends State<ShowWebWidget> {
TextEditingController textController = TextEditingController();
@override
void dispose() {
super.dispose();
// widget.controller.clearCache();
// widget.controller.clearCookies();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
appBar: AppBar(), appBar: AppBar(
title: getTitleWidget(),
),
body: Center( body: Center(
child: SizedBox( child: SizedBox(
width: 1400, width: 1400,
height: 900, height: 900,
child: Webview(controller), child: Webview(widget.controller),
), ),
), ),
); );
} }
Widget getTitleWidget(){
if (widget.main == false) return input();
return Row(
children: [
TextButton(
onPressed: () {
widget.controller.openDevTools();
},
child: const Text('开发者')),
TextButton(
onPressed: () {
widget.controller.executeScript(WindowsJs.inputJs(45));
// controller.executeScript(WindowsJs.inputJs(45));
},
child: const Text('模拟输入测试')),
TextButton(
onPressed: () {
widget.controller.loadUrl('https://www.baidu.com/');
},
child: const Text('跳转首页')),
Row(
children: [
const Text('同步'),
Switch(
value: SynchronizationWebTool.getInstance().webSync,
onChanged: (value) {
setState(() {
SynchronizationWebTool.getInstance().webSync = value;
});
})
],
),
input()
],
);
}
input(){
return Row(
children: [
SizedBox(width: 400, child: TextField(style: const TextStyle(fontSize: 14),controller: textController,)),
TextButton(onPressed: (){
String url = textController.text;
// if (!url.startsWith("https://") ) {
// url = "https://$url";
// }
widget.controller.loadUrl(url);
}, child: const Text('跳转',style: TextStyle(fontSize: 14),))
],
);
}
} }

View File

@ -11,7 +11,7 @@ document.addEventListener("click", function (event) {
// //
window.chrome.webview.postMessage(value); window.chrome.webview.postMessage(value);
window.chrome.webview.postMessage({"text":event.target.textContent,"end":event.target.textContent === "进入游戏"}); // window.chrome.webview.postMessage({"text":event.target.textContent,"end":event.target.textContent === "进入游戏"});
// 'btn' // 'btn'
if (event.target.textContent === "进入游戏") { if (event.target.textContent === "进入游戏") {
@ -31,9 +31,7 @@ document.addEventListener("click", function (event) {
var url = str.substring(startIndex, endIndex); var url = str.substring(startIndex, endIndex);
var newUrl = "https://" + url + "/game/"; var newUrl = "https://" + url + "/game/";
window.chrome.webview.postMessage({"元素地址": classUrl ,"旧地址":window.location.href ,"截取":url,"新地址": newUrl}); // window.chrome.webview.postMessage({"元素地址": classUrl ,"旧地址":window.location.href ,"截取":url,"新地址": newUrl});
//
// window.location.href = "http://www.df6831.com/game/";
window.location.href = newUrl; window.location.href = newUrl;
} }
@ -42,11 +40,28 @@ document.addEventListener("click", function (event) {
/// ///
static String scrollEventJs = ''' static String scrollEventJs = '''
window.onscroll = function() { // window.onscroll = function() {
// // //
var scrollTop = window.scrollY; // var scrollTop = window.scrollY;
window.chrome.webview.postMessage({"scroll": 1 ,"y": scrollTop }); // window.chrome.webview.postMessage({"scroll": 1 ,"y": scrollTop });
}; // };
//
// const checkExist = setInterval(function() {
// const contentWrap = document.querySelector('content');
// const clList = document.querySelector('cl-list');
// console.log('轮询');
// if (contentWrap && clList) {
// clearInterval(checkExist); //
// console.log('停止轮询');
// contentWrap.addEventListener('scroll', function() {
// console.log('contentWrap position:', element.scrollTop);
// });
// clList.addEventListener('scroll', function() {
// console.log('clList position:', element.scrollTop);
// });
// }
// }, 500); // 500
'''; ''';
/// ///
@ -67,6 +82,7 @@ document.addEventListener("click", function (event) {
/// ///
static String inputJs(int value) { static String inputJs(int value) {
return ''' return '''
console.log('输入赋值');
var inputEvent = new Event('input', { var inputEvent = new Event('input', {
bubbles: true, bubbles: true,
cancelable: true, cancelable: true,
@ -74,6 +90,19 @@ document.addEventListener("click", function (event) {
var inputElement = document.querySelector(".bet-money"); var inputElement = document.querySelector(".bet-money");
inputElement.value = "$value"; inputElement.value = "$value";
inputElement.dispatchEvent(inputEvent); inputElement.dispatchEvent(inputEvent);
// var inputElements = document.querySelectorAll(".bet-money");
// inputElements.forEach(function(element) {
// var inputEvent = new Event('input', {
// bubbles: true,
// cancelable: true,
// });
// element.value = "$value";
// element.dispatchEvent(inputEvent);
// });
// const contentWrap = document.querySelector('content');
// const clList = document.querySelector('cl-list');
// console.log(contentWrap, clList);
'''; ''';
} }

View File

@ -1,9 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:web_synchronization_tool/windows/socket_tool.dart';
import 'package:web_synchronization_tool/windows/synchronization_web_tool.dart';
import 'package:web_synchronization_tool/windows/web_grid_view.dart'; import 'package:web_synchronization_tool/windows/web_grid_view.dart';
import 'package:web_synchronization_tool/windows/windowsJs.dart';
import 'windows_web_page.dart';
import 'package:webview_windows/webview_windows.dart'; import 'package:webview_windows/webview_windows.dart';
class WindowsPage extends StatefulWidget { class WindowsPage extends StatefulWidget {
@ -45,101 +41,16 @@ class _WindowsPageState extends State<WindowsPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SocketTool().connect(); // SocketTool().connect();
if (initDone == false) return Container(); if (initDone == false) return Container();
return Scaffold( return Scaffold(
body: Column( body: WebGridWidget(
children: [ controller: gridController,
Container(
height: 50,
color: Colors.white,
padding: const EdgeInsets.symmetric(horizontal: 50),
child: Row(
children: [
// TextButton(
// onPressed: () {
// mainController.executeScript(WindowsJs.clickJs(200, 900));
// },
// child: const Text('模拟点击测试')),
TextButton(
onPressed: () {
mainController.executeScript(WindowsJs.inputJs(45));
// controller.executeScript(WindowsJs.inputJs(45));
},
child: const Text('模拟输入测试')),
TextButton(
onPressed: () {
mainController.loadUrl('https://www.baidu.com/');
},
child: const Text('跳转首页')),
TextButton(
onPressed: () {
SynchronizationWebTool.getInstance().childController.forEach((controller) {
controller.executeScript(WindowsJs.zoom(35));
});
// 468, 72
// controller.executeScript(WindowsJs.zoom(40));// 239,39
},
child: const Text('缩放')),
//
TextButton(
onPressed: () {
mainController
.executeScript('window.resizeBy(-100, -100);');
},
child: const Text('减少尺寸')),
// TextButton(
// onPressed: () {
// mainController.openDevTools();
// },
// child: const Text('开发者')),
// TextButton(
// onPressed: () {
// mainController.executeScript(WindowsJs.message);
// },
// child: const Text('发送消息')),
Row(
children: [
const Text('同步'),
Switch(
value: SynchronizationWebTool.getInstance().webSync,
onChanged: (value) {
setState(() {
SynchronizationWebTool.getInstance().webSync = value;
});
})
],
)
],
),
),
// pageViewWidget()
Expanded(child: pageViewWidget()),
],
), ),
); );
} }
Widget pageViewWidget() {
return Row(
children: [
// SizedBox(
// width: 1000,
// height: 1000,
// child: inWindowsWebView(),
// ),
Expanded(
child: WebGridWidget(
controller: gridController,
))
],
);
}
Widget inWindowsWebView() {
return Webview(mainController);
}
} }