【问题标题】:Purposely Crash Chrome Tab for Chrome Extension故意使 Chrome 扩展程序崩溃的 Chrome 选项卡
【发布时间】:2012-07-14 10:44:47
【问题描述】:

您好,我正在创建一个 Chrome 扩展程序来故意使 Chrome 选项卡崩溃。我的方法没有按照我想要的方式工作。我正在尝试:

chrome.tabs.update({url: "about:crash"});
chrome.tabs.update({url: "chrome://crash"});
window.location = 'about:crash';
window.location = 'chrome://crash';

这些都不起作用。

但是,如果我将 URL 替换为“about:blank”或“http://google.com”之类的内容,它会起作用!

Chrome 是否有某种安全措施,如果有的话...有什么解决方法的建议吗?

如果可能,我想避免使用无限循环使内存过载。

【问题讨论】:

  • 我很好奇你为什么要这样做:)
  • 检查您(后台)页面中的控制台。出现以下错误信息:"Error during tabs.update: I'm sorry. I'm afraid I can't do that."
  • 是的,我收到“不允许加载本地资源:chrome://crash/”和“tabs.update 期间出错:对不起。恐怕我做不到那。”。进行此扩展的原因是我想强制关闭所有选项卡以释放未使用的内存。目前我不得不在 chromes 任务管理器中手动强制关闭它们。
  • 不错的太空漫游参考,从未注意到...
  • @Andy,你写完那个 chrome 扩展了吗?我发现使用 chrome://crash(比 chrome://kill)杀死选项卡是有效释放 RAM 的唯一解决方案...

标签: javascript google-chrome google-chrome-extension crash


【解决方案1】:

在标签上加载chrome://kill

例如,要在 chrome 上关闭此选项卡,请在 URL 栏中输入 chrome://kill 并按 Enter。

Chrome 20 的额外乐趣:chrome://favicon/size/1/http://gonna.crash.you/

【讨论】:

  • kill 只是崩溃并重新加载选项卡
  • @Andy 在我的情况下,它会显示常规的“它已经死了,Jim”(或类似的东西)消息,它会一直保留在那里,直到您手动重新加载它。在 Windows 和 Linux 上的 Chrome 20 上测试。
  • 这对我很有用。任何想法如何通过按键使其“转到”chrome://kill 页面?手写对我来说不够快。
  • @Jeznet 好吧,除了制作连接组合键的用户脚本或 Chrome 扩展程序之外,您还可以将书签添加到 chrome://kill。我不认为它会起作用,但是它确实起作用了 :) 但是……你为什么要杀死这么多页面?
  • @CamiloMartin Fot 与此评论中的原因相同:stackoverflow.com/questions/11483104/…
【解决方案2】:

得到这个工作并打包为extension。以下是相关代码:

// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
  queryInfo = new Object();
  chrome.tabs.query(queryInfo, function(result) {
    var i;
    for (i=0; i < result.length; i += 1) {
        chrome.experimental.processes.getProcessIdForTab(result[i].id, function(processId) {
            chrome.experimental.processes.terminate(processId);
        });
    }
  });
});

【讨论】:

  • 太棒了!该插件有效。你知道我怎样才能在 Chrome 启动时运行它,以杀死所有新标签吗?我的目标是在 Chrome 启动时防止我的许多选项卡阻塞我的所有系统资源,以便以后根据需要加载它们。
  • @Eliot 我非常感谢您的反馈,谢谢。搜索了chrome extension run when chrome starts,但没有找到太多。当我经常使用它时,我通常会在启动过程中反复单击它。
  • @funroll 提到的扩展对我不起作用。在 Chrome 开发版本 36.0.1941.0 dev-m 上试过。它适用于 chrome dev 或 canary 构建吗? (试试金丝雀,因为它会创建一个单独的配置文件,因此不会干扰现有配置文件)
  • @CostinGușă 有一段时间没有更新扩展程序了——如果你想让它与最新的 Chrome 一起使用,很高兴合并拉取请求。
  • @funroll 我不确定我必须做什么。我们继续在github的issues页面讨论,我可以填写一个关于这个的问题吗?
【解决方案3】:

使用experimental processes API,您可以结束进程,包括那些属于选项卡的进程。

我想到了完全相同的用例 - 如果你完成了你的扩展,我想试试!

虽然现在可能更好的主意是让您的背景页面可以将选项卡重定向到基于页面的数据 uri,例如

data:text/html,<a href="http://www.google.com/">click here to restore</a>

或者可能是基于其查询参数生成页面的扩展页面:

my_extension_page.html?url=http://www.google.com/

【讨论】:

  • 我认为这是最好的答案。尽管 Chrome 的公共稳定版本不附带此 API,但如果进程 API 使其成为稳定版本,则可能需要注意。
【解决方案4】:

标签对象的关闭方法应该以有序的方式执行此操作,文档在这里:http://code.google.com/chrome/extensions/tabs.html#method-remove

干杯, T.

【讨论】:

  • 对不起,这不是我要找的。这完全关闭了选项卡。我想要一种使标签崩溃的方法。
  • 这将根据您想要的原因释放并释放未使用的内存?
  • 是的,但是我希望能够保持选项卡处于打开状态,但不能将它们保存在内存中。闲置的标签浪费了太多内存,以至于我们中的许多人都保持打开状态数天/数周/数月。我发现只需通过结束进程或 about:crash 将它们从内存中清除,但我可以稍后刷新选项卡以在页面关闭之前重新加载页面。我知道这是一个奇怪的要求,但老实说,我的疯狂是有办法的:)而且我之前忘了说,谢谢你的建议!
【解决方案5】:

按照here 的描述使用以下 FUN FUN LOOP!

txt = "a";
while(1)
{
    txt = txt += "a";    //add as much as the browser can handle
}
//<i>[evil laugh]</i> BOOM! All memory used up, and it is now <b>CRASHED</b>!

【讨论】:

  • “如果可能的话,我想避免使用无限循环使内存过载。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2020-02-26
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多