Chrome扩展名window.history失败了...但为什么?

时间:2014-05-21 17:13:56

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

这完全让我陷入困境。这里的想法是我需要禁用上下文菜单在这里工作的某些机器上工作的能力。 问题是当我在上下文菜单中单击前进和后退处理程序时,页面保持不变,除非尝试前进时,URL会附加一个'#'..

我进行了以下测试:

在选项卡上打开Chrome开发工具,该选项卡具有一些后退导航历史记录并切换到开发工具控制台选项卡。

我打字:

window.history.back() - 页面回到上一页就好了。 window.history.forward() - 页面进入最后一页就好了。

然后我将控制台框架顶部的上下文从<top frame>切换到我的扩展程序的扩展条目“chrome-extension:// abcd ...”。

我打字:

window.history.back() - 页面回到上一页就好了。 window.history.forward() - 页面进入最后一页就好了。

但是,我的扩展程序中带有附带代码的按钮不起作用。我很想得到一些关于为什么会发生这种情况的反馈。

现在又有一个有趣的好处,可以帮助某些人了解可能发生的事情:

我关闭并重新打开Chrome,并在控制台中运行window.history方法测试(从上面)。方法按预期正常工作。然后我再次尝试测试我写的新上下文菜单处理程序,它继续失败。然而;在这些测试之后,如果我再次尝试在控制台中运行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()}},
                ],
            });
    });

1 个答案:

答案 0 :(得分:3)

这是您正在使用的jQuery simple-context-menu plugin上的错误。替换行:

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

由:

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

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