[英]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
来确定受控选项卡是否已关闭(因为如果选项卡永久关闭,某个值最终会更改)
如何使用:
loadFn
function 中,其中myWindow
和this
指向受控选项卡的window
loadFn
function 中, myWindow.console.log(1)
或this.console.log(1)
都会将1
记录到受控选项卡的控制台
第二次编辑:我将解释它是如何工作的(并按照您在评论中的要求谈论unloadFn
)
我结合使用unload
和load
监听,以便能够"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.