Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Tampermonkey脚本根据页面的打开和呈现方式给出不同的结果?(内容相同)_Javascript_Regex_Tampermonkey_Userscripts - Fatal编程技术网

Javascript Tampermonkey脚本根据页面的打开和呈现方式给出不同的结果?(内容相同)

Javascript Tampermonkey脚本根据页面的打开和呈现方式给出不同的结果?(内容相同),javascript,regex,tampermonkey,userscripts,Javascript,Regex,Tampermonkey,Userscripts,我在Chrome中有一个用户脚本,它在用户打开页面时运行,或者可以在单独的窗口中打开页面,然后在该窗口中运行相关脚本。当用户打开页面时,一切正常 但是,当在另一个窗口中打开页面时,此函数有时无法按预期处理文本 代码: 脚本之前的页面文本示例: 05 6月 2019 8989898 Some text Some more text 当用户打开页面时,用户脚本和控制台中的代码都会给出预期的输出: example.com/page.html?id=8989898 05 Jun 2019

我在Chrome中有一个用户脚本,它在用户打开页面时运行,或者可以在单独的窗口中打开页面,然后在该窗口中运行相关脚本。当用户打开页面时,一切正常

但是,当在另一个窗口中打开页面时,此函数有时无法按预期处理文本

代码:

脚本之前的页面文本示例:

05 6月 2019  8989898
Some text

Some more text
当用户打开页面时,用户脚本和控制台中的代码都会给出预期的输出:

example.com/page.html?id=8989898
05 Jun 2019     
Some text

Some more text
但是,当在单独的窗口中启动时,它将返回TM脚本和console run:

05 Jun 2019
example.com/page.html?id=8989898

Some text

Some more text
我无法想象在我的一生中,为什么第二个替代品在一个单独的窗口中的功能似乎有所不同。我认为这可能与JavaScript的一些正则表达式功能有关,例如移动索引,影响链式调用,但MDN表明它只返回字符串

编辑: 评论后获得的进一步信息如下:

在新弹出窗口中启动页面时,页面很小,原始文本呈现如下:

05 6月 2019
8989898
Some text
Some more text
但是,当窗口与用户访问时一样大时,它看起来像:

05 6月 2019  8989898
Some text

Some more text

通常,如果同一个用户脚本在同一页面上给出不同的结果(取决于该页面的打开方式),则原因可能是:

时机。页面的加载速度取决于各种因素,通常是缓存。因此,脚本可能会在其搜索的内容出现/完成之前触发。 使用waitfork或MutationObserver进行补偿。在前面的问题中搜索这些问题

阿贾克斯。该页面实际上并没有执行正常的HTML加载,而是使用javascript重写新页面。 同样,WaitForkPercements或MutationObserver对此类页面也很有帮助。同样,前面的问题也提到了这一点

响应性布局/行为。同一页面可能显示不同的内容,和/或以不同的方式显示,具体取决于窗口大小、某些状态跟踪或某些传入参数。 在这种情况下,脚本可能需要逻辑代码来适应页面的不同变体

对渲染敏感的代码。如果脚本依赖于位置、CSS样式、元素大小等。;仅当窗口大小不同,或页面呈现时间不同时,它可能会中断

在这种情况下,问题代码似乎具有原因4的变体。它使用innerText和。innerText也比textContent慢

解决方案是使用textContent而不是innerText

下面是一个演示,展示了这两个属性的不同之处:

srcNode=$.variableDiv[0]; $TC.text srcNode.textContent; $IT.text srcNode.innerText; .variableDiv{边框:1px纯灰色;边距底部:1em;} td,th{边框:1px实心灰色;填充:0.2ex 1ex;} 表{边框折叠:折叠;} 资料来源处: 查克·诺里斯有两种速度:步行和杀戮。 隐藏文本 文本内容 内部文本
目标页面不可公开访问;需要明确的是,当我提到不能在控制台中复制它时,这包括在脚本打开的窗口的控制台中,因此在最终渲染中应该没有任何区别。这可能是一个时间问题,尽管我希望在这种情况下,当用户打开时也会发生。我会调查文本内容,看看它是否能提供不同/更好的结果。我非常清楚使用最少的可复制示例;我不可能提供网站的副本,或者比之前提供的文本更多。也就是说,您之前的评论是正确的,这是因为打开的窗口的尺寸不同,导致渲染的空白,因此innerText的值也会发生变化。textContent提供了一个稳定的参考,适用于一致的格式,非常感谢@布罗卡达姆说,关于文本内容的知识正是我修复其他一些常年存在的错误所需要的,毫无疑问,我将在未来避免无数其他错误;如果你想做点什么的话,我愿意接受这个答案。再次感谢!太棒了,再次感谢你!关于使用waitforkyelments计时/AJAX问题的小问题此页面确实使用AJAX加载信息,我的脚本以前使用waitforkyelments来支持这一点。后来我对它进行了更改,这样我就有了一个函数,可以检查元素是否存在,如果不存在,则通过setTimeout再次调用自己。这样做是否有问题,或者WaitForkEyelments提供了一些我不知道的其他好处?@Altigraph,最好在这种情况下使用setInterval。在某些情况下,重复/链接设置超时可能会影响内存/性能。。。WaitForkEyelments的优点是1易于使用,2更容易进行多次或链式等待,而不会产生冲突,3 脚本代码更易于自我记录,4更易于更改/扩展。。。但是,使用任何对你和几年后必须使用代码的人有用的东西,即使是你未来的自己。
05 6月 2019  8989898
Some text

Some more text