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