繁体   English   中英

使用外部 javascript 代码在 Chrome 控制台上运行代码片段

[英]Using external javascript code to run a snippet on the Chrome console

是否可以在外部 javascript 代码(例如,通过 tampermonkey 的用户脚本)中在 Chrome 控制台上运行代码片段。 例如, console.log将文本打印到控制台。 是否有某种方式,例如 function console.eval或更复杂的方式,我可以控制台上运行代码而无需在给定网站上手动打开它,而是使用网站背后的原始 javascript 代码或用户脚本?

注意:我在 Windows 10 上使用 Google Chrome。最好这个答案应该尽可能普遍适用,但对我来说,首要任务是让它在我的环境中工作。

谢谢,

麦克风

英国,当我说if the page is reloading constantly, the "console" that u think of would also reload?? ,我们很多人都知道我在下面做什么(如果不是我们所有人),但我最终将它与你的问题联系起来。 使用一个选项卡控制另一个选项卡

一个编辑:我使用interval来确定受控选项卡是否已关闭(因为如果选项卡永久关闭,某个值最终会更改)

如何使用

  1. 打开与所需 url 具有相同来源的选项卡(但不是不断重新加载的站点)..
    例如如果需要,在“https://example.com/404”上打开一个标签 url 是“https://example.com”是所需的 url(不断重新加载的)
  2. 在我下面的代码片段中,您可以将选项卡控制代码放在loadFn function 中,其中myWindowthis指向受控选项卡的window
    例如loadFn function 中, myWindow.console.log(1)this.console.log(1)都会将1记录到受控选项卡的控制台


第二次编辑:我将解释它是如何工作的(并按照您在评论中的要求谈论unloadFn
我结合使用unloadload监听,以便能够"on reload"重复发送代码,这本身不是一个事件,所以我必须创建它 如果我没有解释自己,我现在详细介绍 go..
当页面重新加载时(或者当我只是生成页面时,例如var myWindow=window.open(desiredUrl) ), unload事件发生。 然而,只有一个问题 每次重新加载页面时,所有事件侦听器和您放置的任何代码都会被删除(因为重新加载卸载然后重新加载
解决方案很简单:在每次unload时,我再次设置监听器,并且由于 function 会调用自身(每次页面卸载时),监听器将在每次页面重新加载时成功重新加载(这就是loadFn可以运行的原因每次重新加载后的另一个选项卡)
注意:您可能会问“为什么要使用setTimeout呢?” . 其实这很重要 如果没有setTimeout ,事件侦听器不会被添加,我认为这是因为选项卡会忽略您的命令(因为它将专注于加载其默认内容(例如事件侦听器)),并且asynchronous programming在这种情况下会产生奇迹因为它会等到其他东西被处理(比如事件处理的东西)然后运行
旁注:如果这不是setTimeout有效而不使用它无效的原因,那么我所知道的是,没有它,它就不起作用,有了它,它就起作用


var myWindow=window.open(desiredUrl) //remember to run this code on the same origin as the desiredUrl
function loadFn(){
  //this will happen every time myWindow loads or reloads
  myWindow.alert("It runs in the controlled tab")
  myWindow.console.log("Even in the controlled tab's console it works >:D")
}
function unloadFn(){setTimeout(()=>{
  myWindow.addEventListener('unload',unloadFn)
  myWindow.addEventListener('load',loadFn)
  if(!myWindow.Window){console.warn("myWindow was CLOSED")}
},0)}
myWindow.addEventListener('unload',unloadFn)
//extra thing below to tell if controlled tab is closed >:D
var i=setInterval(()=>{
  //for if controlled tab is closed
  if(!myWindow.document.location){clearInterval(i);console.warn("myWindow was CLOSED")}
},0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM