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

View File

@ -36,12 +36,13 @@ class _WebGridWidgetState extends State<WebGridWidget> {
controllerInit();
}
///
Future controllerInit() async {
for (var i = 0; i< 10 ; i++) {
var controller = WebviewController();
await controller.initialize();
controller.loadUrl('http://www.df6831.com/');
controller.loadUrl('https://www.df6831.com/');
// controller.executeScript(WindowsJs.zoom(35));
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(35));
@ -86,7 +87,7 @@ class _WebGridWidgetState extends State<WebGridWidget> {
Navigator.of(context).push(PageRouteBuilder(
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 {
const ShowWebWidget({super.key, required this.controller});
class ShowWebWidget extends StatefulWidget {
const ShowWebWidget({super.key, required this.controller, this.main = false});
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
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.transparent,
appBar: AppBar(),
appBar: AppBar(
title: getTitleWidget(),
),
body: Center(
child: SizedBox(
width: 1400,
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({"text":event.target.textContent,"end":event.target.textContent === "进入游戏"});
// window.chrome.webview.postMessage({"text":event.target.textContent,"end":event.target.textContent === "进入游戏"});
// 'btn'
if (event.target.textContent === "进入游戏") {
@ -31,9 +31,7 @@ document.addEventListener("click", function (event) {
var url = str.substring(startIndex, endIndex);
var newUrl = "https://" + url + "/game/";
window.chrome.webview.postMessage({"元素地址": classUrl ,"旧地址":window.location.href ,"截取":url,"新地址": newUrl});
//
// window.location.href = "http://www.df6831.com/game/";
// window.chrome.webview.postMessage({"元素地址": classUrl ,"旧地址":window.location.href ,"截取":url,"新地址": newUrl});
window.location.href = newUrl;
}
@ -42,11 +40,28 @@ document.addEventListener("click", function (event) {
///
static String scrollEventJs = '''
window.onscroll = function() {
//
var scrollTop = window.scrollY;
window.chrome.webview.postMessage({"scroll": 1 ,"y": scrollTop });
};
// window.onscroll = function() {
// //
// var scrollTop = window.scrollY;
// 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) {
return '''
console.log('输入赋值');
var inputEvent = new Event('input', {
bubbles: true,
cancelable: true,
@ -74,6 +90,19 @@ document.addEventListener("click", function (event) {
var inputElement = document.querySelector(".bet-money");
inputElement.value = "$value";
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: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/windowsJs.dart';
import 'windows_web_page.dart';
import 'package:webview_windows/webview_windows.dart';
class WindowsPage extends StatefulWidget {
@ -45,101 +41,16 @@ class _WindowsPageState extends State<WindowsPage> {
@override
Widget build(BuildContext context) {
SocketTool().connect();
// SocketTool().connect();
if (initDone == false) return Container();
return Scaffold(
body: Column(
children: [
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()),
],
body: WebGridWidget(
controller: gridController,
),
);
}
Widget pageViewWidget() {
return Row(
children: [
// SizedBox(
// width: 1000,
// height: 1000,
// child: inWindowsWebView(),
// ),
Expanded(
child: WebGridWidget(
controller: gridController,
))
],
);
}
Widget inWindowsWebView() {
return Webview(mainController);
}
}