Chrome扩展窗口.历史失败了,但为什么呢?

Chrome extension window.history fails...but why?

本文关键字:为什么呢 失败 扩展 窗口 历史 Chrome      更新时间:2023-09-26

这真是让我大吃一惊。这里的想法是,我需要禁用上下文菜单在某些机器上工作的能力。问题是,当我单击上下文菜单中的forward和back处理程序时,页面保持不变,除非尝试前进,URL会添加'#'.

我运行了以下测试:

打开Chrome开发工具的选项卡上有一些回导航历史,并切换到开发工具控制台选项卡。

我输入:

window.history.back()—page返回到前一页。window.history.forward() - page forward to last page .

然后我将控制台框架顶部的上下文从<top frame>切换到扩展条目'chrome-extension://abcd…我的分机号。

我输入:

window.history.back()—page返回到前一页。window.history.forward()—page forward to last page just fine.

然而,在我的扩展随附代码的按钮不工作。我很想知道为什么会发生这种情况。

现在还有一个有趣的好消息,可以帮助人们了解可能发生的事情:

我关闭并重新打开Chrome新鲜,并运行窗口。在控制台中记录方法测试的历史(从上面)。这些方法按预期正常工作。然后,我再次尝试测试我编写的新上下文菜单处理程序,但仍然失败。然而;在这些测试之后,如果我试图再次在控制台中运行history.back方法,它们现在会失败。

在禁用所有其他扩展并重新启动浏览器后,使用相同的步骤进行测试,结果相同。

manifest.json

{
    "name": "Disable Context Menu",
    "version": "0.1",
    "manifest_version": 2,
    "description": "Disabled context menu items for thin clients",
    "permissions": ["contextMenus","tabs"],
    "icons" : {"16": "/icons/printer.png",
               "16": "/icons/reload.png",
               "16": "/icons/back.png",
               "16": "/icons/forward.png"},
    "web_accessible_resources": ["/icons/printer.png","/icons/reload.png",
                                 "/icons/back.png","/icons/forward.png"],
    "content_scripts": [{ 
                           "matches" : ["<all_urls>"],
                           "js" : ["/js/jquery.js","/js/jquery.contextmenu.js","/js/content.js"],
                           "css" : ["/css/jquery.contextmenu.css","/css/menu.css"]
                       }]
}

content.js

function showPrintDialog()
{
    window.print();
}
$().ready(
    function()
    {
        $('body')
            .contextPopup(
            {
                title: 'Generic Context Menu',
                items: 
                [
                    {label: "forward", 
                     icon: chrome.extension.getURL('/icons/forward.png'),
                     action: function(){history.forward()},
                    },
                    {label: "back", 
                     icon: chrome.extension.getURL('/icons/back.png'),
                     action: function(){function(){history.back()},
                    },
                    {label: "reload", 
                     icon: chrome.extension.getURL('/icons/reload.png'),
                     action: function(){window.location.reload(true)}},
                     null,
                    {label: "print", 
                     icon: chrome.extension.getURL('/icons/printer.png'), 
                     action: function(){showPrintDialog()}},
                ],
            });
    });

这是你正在使用的jQuery simple-context-menu插件上的一个bug。替换行:

row.find('a').click(function () { item.action(e); });
由:

row.find('a').click(function (e) { e.preventDefault(); item.action(e); });

如果不添加preventDefault(),单击菜单会导致浏览器导航到带有附加#的当前url,这会干扰您预期的history操作。