脚本体验师001 发表于 2022-11-10 15:30:59

切换网页时遇到的尴尬事,老师们来看一眼指点我一个明白

    当前页面为第一页面,点击 =>
    new Promise(function (resolve, reject) {
      window.open("打开另一个页面", "_blank");
      resolve(prompt("请写入您在第二页获取的数据"));
    }).then (function (person) {
      if (person) {
            console.log("获取成功");
      }
      else {
            console.log("获取失败");
      }
    });
    => 此时已经打开了第二页面,在第一页面 prompt命令 有几率性的执行
    打开了第二页面获取数据后返回 =>
    prompt命令 执行了就是执行了,没执行等它狗曰的一万年也没影
    那么问题是:切换页面的时候这些命令是没来得及触发?是处于什么样的状态?是休眠了还是被销毁了?如何改善

王一之 发表于 2022-11-10 15:31:00

!(data/attachment/forum/202211/10/163234xb9vtohzrtb91gxa.png)

好像被拦截了,我允许之后,有时候会要我输入prompt,有时候不用

貌似是一个几率性的问题

我也不知道如何解释,看起来是当页面在后台时,prompt会始终返回null

而且如果弹出成功,那么对应的网站无法加载

如果对于网站加载成功,那么这个窗口会弹出失败

基于这个想法,我使用`GM_openInTab`打开新页面,但是发现又回到了第一个问题页面在后台时,prompt会始终返回null

或者能不能这样?

```js
// ==UserScript==
// @name         New Userscript
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/thread-3599-1-1.html
// @grant GM_openInTab
// ==/UserScript==

new Promise(function (resolve, reject) {
    GM_openInTab("https://bbs.tampermonkey.net.cn/");
    const fn = function () {
      console.log(document.hidden)
      if (!document.hidden) {
            window.removeEventListener("visibilitychange", fn);
            resolve(prompt("请写入您在第二页获取的数据"));
      }
    }
    window.addEventListener("visibilitychange", fn);
}).then(function (person) {
    console.log(person);
    if (person) {
      console.log("获取成功");
    }
    else {
      console.log("获取失败");
    }
});
```


脚本体验师001 发表于 2023-8-1 13:26:13

纠正:100%触发这话说的太满了,搜狗浏览器不触发
页: [1]
查看完整版本: 切换网页时遇到的尴尬事,老师们来看一眼指点我一个明白