parent
67be45e447
commit
6474edc27e
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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),))
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
''';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue