Chrome扩展窗口.历史失败了,但为什么呢?
Chrome extension window.history fails...but why?
这真是让我大吃一惊。这里的想法是,我需要禁用上下文菜单在某些机器上工作的能力。问题是,当我单击上下文菜单中的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
操作。
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 为什么我的函数没有被调用呢
- JSLint errors on 'new function(){..}'但为什么呢?如果我想要匿名关闭
- 为什么会失败: 'function log(){console.log.apply(null,arguments);}`
- 为什么如果失败,我无法保留调用 api
- 我的查询获胜'因为一个剧本,它不能工作(它以错误的方式工作)!?但为什么呢?SESSIONS和PHP
- 根据Javascript,DIV的宽度不算什么,为什么呢
- 为什么呢?Else块只工作一次
- 将JavaScript对象序列化为JSON返回“{}}”,但是为什么呢?
- 动态创建复选框单击事件,选择整行,而不仅仅是jquery数据表中的复选框.为什么呢?
- 在应用dequeue()之前,多个动画不会在jQuery queue()上运行,为什么呢?
- 我得到了错误:太多的递归.为什么呢?
- 子类不起作用,为什么呢?
- jQuery泄漏解决了,但为什么呢?
- 有人能解释这个JS代码和错误给我吗?为什么会失败
- Chrome扩展窗口.历史失败了,但为什么呢?
- jQuery .text()返回NaN,为什么呢?
- 为什么它失败说d3是没有定义时,作为字符串在浏览器中
- JavaScript没有按照我的要求去做!为什么呢?
- jQuery上的函数被绑定到容器,为什么呢?