【问题标题】:How to activate the Tab from the Javascript Console below?如何从下面的 Javascript 控制台激活选项卡?
【发布时间】:2012-12-08 04:39:55
【问题描述】:

我正在使用 Chrome 的 javascript 控制台(如果您使用的是 Chrome 或 Chromium,则只需按 Ctrl + Shift + J现在打开它)在当前打开的选项卡下方。

有什么我可以在控制台中输入,以便上面选项卡中的文档获得焦点而控制台失去焦点?

我试过了

chrome.tabs

但它只给了

undefined

【问题讨论】:

  • 我听说你想把这个问题推高,所以这里是一个小小的推动:)
  • 谢谢,在一个小时内我就可以为此付出代价,所以其他用户不会认为这只是一个懒散的问题。我可以想象这并不容易回答,因为人们可能会直接认为这是不可能的,并且要回答它需要非常了解 Google Chrome / Chromium 才能真正知道是否可能.
  • 你可能已经在 Chrome 扩展库中找到了chrome.tabs docs,似乎chrome.tabs 仅限于扩展代码使用。如果您在控制台中输入“chrome”,您将获得控制台中可用的所有属性。看看我是否能找到解决方法。
  • @SaschaM78:是的,我发现chrome.tabs。很高兴看看是否有解决方法。
  • 这是一个简洁的快捷方式。我很好奇为什么要键入退出命令而不是使用 Ctrl-Shift-J 关闭终端?

标签: javascript debugging google-chrome console chromium


【解决方案1】:

https://support.google.com/chrome/bin/answer.py?hl=en&answer=157179

(F6 ) 或 (Shift + F6)

但在到达主要网页内容之前,您必须切换大量内容。

【讨论】:

  • 使用 "enter into the console" 我实际上的意思是在其中键入 javascript 代码并按 enter ;) - 但无论如何都欢迎使用热键,感谢您的提示。
  • FWIW,我找到了一半的答案。 developer.chrome.com/extensions/messaging.html
  • 即对于扩展,如果用户允许,他们可以访问chrome.tabs(扩展在安装时要求获取权限)。
【解决方案2】:

根据Firebug's Command Line API* wikipage,没有办法;它只会输出有关输入的数据。

*这是 Javascript 控制台使用的

【讨论】:

  • 即使这是关于 Firebug(可能还有 Chrome)的一个很好的提示,但这并不意味着在 Google Chrome 中没有其他功能可以做到这一点。只是注意到。无论如何感谢您的链接,我不知道该 API。
【解决方案3】:

在不关闭控制台的情况下获得焦点的唯一方法是调用alert();confirm();prompt();
或者通过关闭控制台 (window.open("javascript:close()","_self");) ,主选项卡可以获得焦点。

【讨论】:

  • 这实际上与alert()confirm()prompot() 一起使用,但有那个消息框存在的副作用。所以它不关注标签而是那些消息框。无论如何,谢谢你的建议。不过,打电话给window.open("javascript:close()","_self") 并没有给我太大的影响。
  • 迄今为止最有创意的答案。
【解决方案4】:

无论如何我都不会称这是一个优雅的解决方案,但作为一个 hack,它会完成这项工作。

您的问题是“如何将焦点放在 来自 Chrome 控制台的主文档”;有了这个,我加入了一个中间元素——一个弹出窗口。这个想法是,如果您可以创建一个自动关闭的弹出窗口(从控制台),那么当它关闭时,焦点会返回到父窗口。在这种情况下,它是您所在的实际文档,而不是 Chrome 中的控制台。

这是完整的代码布局:

var openScript = document.createElement('script');
openScript.innerHTML = 'openWindow = window.open(""); openWindow.document.write(\'<script>window.close();</script>\');';
document.body.appendChild(openScript);

此代码可以折叠成一个可以复制+粘贴到控制台的单行代码,在您点击 Enter 后,它将弹出、关闭并将焦点返回到原始文档。在您将焦点放在控制台之前页面上的任何元素都已获得焦点,或者您将焦点更改为 in 控制台(通过document.getElementById('something').focus() 或类似方式)的任何元素,都将获得页面上的焦点。

需要注意的是,您使用此方法的网站需要启用弹出窗口。或者,不是真的推荐,您可以在 Chrome 中“启用所有弹出窗口”。

作为额外的附加功能,如果您要在同一页面上多次使用它(不刷新),您可以将添加到页面的 javascript 包装在一个函数调用中,并且每次只调用该函数。例如:

...
openScript.innerHTML = 'function refocus() { openWindow = window.open(""); openWindow.document.write(\'<script>window.close();</script>\'); }';
...

然后,只要您想将焦点返回给父级,只需调用 refocus();。当然,如果您出于任何原因离开当前页面,则需要再次重新运行完整的代码块。

对于它的价值,如果你发现自己经常使用它,你也可以添加扩展 Tampermonkey 并将这段代码保存到那里的函数中;然后,您无需担心每次都运行整个程序 - 您只需调用您保存的函数名称即可。

上面的单行(便于复制+粘贴):

var openScript = document.createElement('script'); openScript.innerHTML = 'openWindow = window.open(""); openWindow.document.write(\'<script>window.close();</script>\');'; document.body.appendChild(openScript);

【讨论】:

    【解决方案5】:

    而不是在控制台中粘贴代码:

    var a = function() {my code...}; a()
    

    您可以从 url 栏粘贴并运行它:

    javascript:var a = function() {alert('hi');}; a()
    

    您甚至可以将此 javascript: url 添加为书签,这是运行多少代码 sn-ps ('bookmarklets')。

    【讨论】:

    • 不想在这里停止你的动力,但建议alert() 的答案已经存在。从技术上讲,这不是一个答案(正如已经评论过的那样),因为它将焦点放在警报框上,而不是选项卡上。我需要标签中的焦点。
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多