whitesev 发表于 2024-5-1 13:00:42

关于使用vite-plugin-monkey插件进行dev执行时刻问题

脚本设置中已设置`@runb-at document-start`
使用`pnpm run dev`时,想劫持`unsafeWindow.setTimeout`发现总是劫持不了,但是使用`preview`进行安装后能劫持
想了个麻烦的方法,使用`build --watch`,然后油猴中使用`@require file://....`引入自动打包后的脚本,但是感觉还是很麻烦,想在`dev`下使用
查了`issue`后找到[#60](https://github.com/lisonge/vite-plugin-monkey/discussions/60#discussioncomment-5328945)
但是这个解决方法没看懂😰,求gg解答

比如我想在`https://m.baidu.com/s?word=test`下劫持掉`setTimeout`

## dev下(劫持失败)
!(data/attachment/forum/202405/01/125923tv3b7w723g1oovvz.png)

## 使用file://引入的build后的脚本(劫持成功)
!(data/attachment/forum/202405/01/130004yrbrm3r0r13vbnbr.png)

whitesev 发表于 2024-5-1 17:54:44

本帖最后由 whitesev 于 2024-5-1 17:57 编辑

> 本帖最后由 whitesev 于 2024-5-1 17:57 编辑

!(data/attachment/forum/202405/01/175257a4xc01955he9as3g.png)

!(data/attachment/forum/202405/01/175356ivvgawegyor60p08.png)

!(data/attachment/forum/202405/01/175336xrjqqf2i7wqcbwqf.png)


~~还有个很好奇的地方,为啥第一个正常,第二种方式提示错误😰~~

啊,想了一下,应该是填入的`bottom`被认为是一个变量,传入要为字符串的话再加个引号

王一之 发表于 2024-5-3 09:27:34

有可复现的简单示例吗?

s0919756 发表于 2024-5-4 16:55:17

在使用 @run-at document-start腳本將在文檔開始加載時運行..在DOM元素可用之前。如果在這個階段使用 unsafeWindow.setTimeout,可能會因為 unsafeWindow 對象還沒有完全準備好而導致錯誤

解決這個問題的一個方法是確保在使用 unsafeWindow.setTimeout 之前,頁面的主要部分已經加載完成。您可以通過監聽 DOMContentLoaded 事件來確保DOM元素已經準備好:JS腳本方法是...document.addEventListener('DOMContentLoaded', (event) => {
    unsafeWindow.setTimeout(() => {
      // 代碼
    }, 1000);
});
確保您的構建工具(如Webpack或Rollup)正確處理了模塊之間的依賴關係,並且沒有對全局對象進行不必要的封裝或修改。
確定沒問題的話~$$$捐給油猴或腳本貓吧~我之前都用油猴...現在用腳本貓....但是都沒付費

whitesev 发表于 2024-5-4 21:16:30

王一之 发表于 2024-5-3 09:27
有可复现的简单示例吗?

https://baiqi.lanzoul.com/iYE4d1xown7g

gg看这个demo
```js
pnpm i
pnpm run dev
pnpm run build
```

whitesev 发表于 2024-5-4 21:20:03

> (forum.php?mod=redirect&goto=findpost&pid=81497&ptid=6965)
> > 在使用 @run-at document-start腳本將在文檔開始加載時運行..在DOM元素可用之前。如果在這個階段使用 uns ...

unsafeWindow就是浏览器window,这里用不到DOM的相关操作,不存在需要等待页面loaded

s0919756 发表于 2024-5-5 02:36:01

本帖最后由 s0919756 于 2024-5-5 02:45 编辑

> 本帖最后由 s0919756 于 2024-5-5 02:39 编辑

你的安裝指令是正確的,而我的意思是你的腳本啟動後,要下載的目標就會開始準備,這個時間受很多因素影響,例如,網路速度,檔案大小,來源數據正確與否,為了避免錯誤,你可以在腳本中填加我給你的js代碼段,這段代碼是依照你原來的腳本,所添加的,那段是萬用的,為的就是避免你下載的時間點出錯,加那段代碼之後再試試看吧!如果還是錯誤,告訴我你整段腳本,我幫你修正,因為js本身就是很強大的語言,特性是面向前端,也就是瀏覽器操控,而非終端,,其他工具做的到,js一樣可以,而不管是油猴或腳本貓都可以協助你,舉例,你也可以把cmd讓他在瀏覽器發哮,在腳本編碼方式套用node.js的模型就可以了,我有在腳本站放了一個模型,後台腳本ping這是為了處理多種異步函數自動化而打造的,當中的概念有包含çmdpingip,套用的就是node的模型,當中也包函我給你的代碼段,而這個是腳本處理錯誤的設置,如果您是想要學編碼我很樂意為你服務,以後你不用再研究其他工具或代碼語言,js腳本搭配油猴,腳本貓這個都有編輯功能,也有輔助工具,一樣可以幫你成為主宰者,掌握世界,加油,

王一之 发表于 2024-5-5 23:53:36

我测试了一下,我觉得应该是运行时间的问题,dev模式下应该还要执行一些额外的函数,导致劫持时间过长,页面已经使用了未被劫持的`setTimeout`

我在`vite.config.ts`添加了`"run-at": "document-start",` 可以成功劫持了:

!(data/attachment/forum/202405/05/235334l5aas00n92gn2qad.png)

whitesev 发表于 2024-5-6 14:58:26

s0919756 发表于 2024-5-6 13:05
你是想下載畫面中的影片嗎??????原因出在......你搞得太複雜了~~~那個50秒我幫你下載回來了~要怎麼寄給妳呢 ...

并不是,我不需要下载页面中的东西,只是想劫持setTimeout

whitesev 发表于 2024-5-6 15:10:07

王一之 发表于 2024-5-5 23:53
我测试了一下,我觉得应该是运行时间的问题,dev模式下应该还要执行一些额外的函数,导致劫持时间过长 ...

`document-start`已设置了,       
注入模式设置的
+ `即时`劫持不到
+ `标准`刷新10次可能就2次劫持到函数

😰很奇怪,暂时还想不到还有啥方式能稳定劫持到
页: [1] 2
查看完整版本: 关于使用vite-plugin-monkey插件进行dev执行时刻问题