chrome插件内容脚本和页面通信
发送方
postMessage({type: 'NOTIFY', msg: 'msg'}, '*') //
接收方
window.onmessage = (e) => {
console.log("收到消息");
let { type , msg} = e.data;
switch (type) {
case "NOTIFY":
break;
}
};
发送方
postMessage({type: 'NOTIFY', msg: 'msg'}, '*') //
接收方
window.onmessage = (e) => {
console.log("收到消息");
let { type , msg} = e.data;
switch (type) {
case "NOTIFY":
break;
}
};
mouse event
function createMouseEvent(eventType, rect) {
return new MouseEvent(eventType, {
bubbles: true,
cancelable: true,
view: window,
clientX: rect.left + rect.width / 2, // 元素的水平中心
clientY: rect.top + rect.height / 2, // 元素的垂直中心
screenX: window.screenX + rect.left + rect.width / 2, // 相对于屏幕的位置
screenY: window.screenY + rect.top + rect.height / 2, // 相对于屏幕的位置
button: 0 // 左键
});
}
const rect = ele.getBoundingClientRect();
ele.dispatchEvent(createMouseEvent('mousedown', rect));
ele.dispatchEvent(createMouseEvent('mouseup', rect));
ele.dispatchEvent(createMouseEvent('click', rect)); // 模拟 click 事件
point event
function createPointerEvent(eventType, rect) {
return new PointerEvent(eventType, {
bubbles: true,
cancelable: true,
view: window,
clientX: rect.left + rect.width / 2,
clientY: rect.top + rect.height / 2,
screenX: window.screenX + rect.left + rect.width / 2,
screenY: window.screenY + rect.top + rect.height / 2,
button: 0,
pointerId: 1, // 指针 ID,一般使用 1
width: 1, // 指针宽度
height: 1, // 指针高度
pressure: 0.5 // 模拟的触控压力,0-1 范围
});
}
let selects = document.getElementsByTagName("select");
if (selects.length !== selectAnswer.length) {
layer.msg("页面上的题可能已经发生了变化", { icon: 0 });
return;
}
let lastScope = NaN;
let idx = -1;
// 获取Angular作用域
selectAnswer.forEach((answer, index) => {
let scope = angular.element(selects[index]).scope();
// console.log(scope.subject.sub_subjects);
// console.log(lastScope === scope, lastScope);
if (idx === -1) {
idx = 0;
} else if (lastScope === scope) {
idx += 1;
} else {
idx = 0;
}
lastScope = scope;
//angular.element(document.getElementsByTagName("select")[0]).scope().subject.sub_subjects;
scope.$apply(() => {
console.log(scope.subject.sub_subjects[idx]);
let old = scope.subject.sub_subjects[idx].answeredOption;
scope.subject.sub_subjects[idx].answeredOption = answer;
scope.onChangeSubmission(scope.subject.sub_subjects[idx]);
console.log(scope.subject.sub_subjects[idx]);
console.log(
`old: ${old},new:${answer}, now:${scope.subject.sub_subjects[idx].answeredOption}`,
);
});
$(selects[index]).multiselect("refresh");
angular.element(selects[index]).triggerHandler("change");
});
const observer = new MutationObserver((mutations, obs) => {
let ele = document.querySelector('div')
if (ele) {
//todo
}
});
observer.observe(ele, {
childList: true,
subtree: true
});
# 使用scratch作为基础镜像
FROM scratch
WORKDIR /app
# 复制本地编译好的应用程序到容器中
# GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o ./bin/main main.go
COPY ./bin/main /app/main
# 复制配置文件和其他必要的文件到容器中
#COPY ./config.toml /app/config.toml
# 复制时区数据文件到容器中 需要把时区文件先复制到项目下
COPY ./zoneinfo/Asia/Shanghai /etc/localtime
# 设置时区环境变量
ENV TZ=Asia/Shanghai
# 运行应用程序
ENTRYPOINT ["/app/main", "-conf", "/app/config.toml"]