阅读:40957回复:98
[Nightly] Nightly 69.0a1(2019-05-21) 将主界面由 xul 改为 xhtml
如题。由原来的
chrome://browser/content/browser.xul 改为 chrome://browser/content/browser.xhtml 相关bug Bug 1534407 - Enable browser.xhtml by default 预计一大波 uc 脚本将要失效。 以下提供一些针对本次更新的导致脚本失效的修改参考。 首先如果使用了alice 的引导脚本(userChrome.js)的话, 大部分针对主界面的脚本将会失效。 注意本修改不作向下兼容。 var BROWSERCHROME = "chrome://browser/content/browser.xul"; //Firfox //改为 var BROWSERCHROME = "chrome://browser/content/browser.xhtml"; //Firfox if(/.html?$/i.test(location.href)) return; //改为 if(/\.html?$/i.test(location.href)) return; //两处地方的 if (!(doc instanceof XULDocument)) return 0; //改为 //if (!(doc instanceof XULDocument)) // return 0;注意更新或修改 userchrome.js 引导文件后, 需要退出 FF 并删除配置目录下的 startupCache 文件夹才能生效。 uc 脚本部分 1、 //如果脚本中有(无论单双引号) location.href == 'chrome://browser/content/browser.xul' /*或*/ location == 'chrome://browser/content/browser.xul' //替换为 location.href.startsWith('chrome://browser/content/browser.x') //如果是 location.href != 'chrome://browser/content/browser.xul' /*或*/ location != 'chrome://browser/content/browser.xul' //则替换为 !location.href.startsWith('chrome://browser/content/browser.x') // 脚本文件头如果存在下面一行 // @include chrome://browser/content/browser.xul //则改为 // @include chrome://browser/content/browser.xhtml //或者 // @include main 2、 由于 Firefox 的主文档由 browser.xul 变为 browser.xhtml 所以通过 document.createElement 方法创建的元素的命名空间 由 http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul 自动变为 http://www.w3.org/1999/xhtml 即默认创建为 html 命名空间的元素。 因为目前大部分控件如:菜单、按钮还是由 xul 元素实现的 所以如果 uc 脚本中使用了该方法创建 xul 元素(注意区分 xul 元素和 html 元素)可能会导致一些异常。 要用 document.createXULElement 或者 document.createElementNS 方法创建 xul 元素, 例如创建的菜单元素: //由原来的 document.createElement('menu') //改为 document.createXULElement('menu') //或者 document.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul','menu') 其它的一些 xul 元素通常为 menu、menuitem、menupopup、toolbarbutton、box、textbox、hbox、vbox、label ...... 参考XUL Reference - Mozilla | MDN 3、 一些针对主界面的 css 样式代码失效,可能限定了针对 browser.xul 文档路径。 @-moz-document url("chrome://browser/content/browser.xul") /*上一行无论单引号或者双引号,或者没有引号,都可以改为*/ @-moz-document url("chrome://browser/content/browser.xul"), url("chrome://browser/content/browser.xhtml") 这是由于Bug 1560915 - Hardcode minimal eval()-whitelist for test files into eval()-assertion 禁止了 eval/new Funtion 等计算字符串函数,使用这些需要计算函数脚本就会导致崩溃。 可以通过设置 about:config 中的 security.allow_eval_with_system_principal 的值为 true 来跳过。 等 Moz 解决了这些 bug(Bug 1473549 - [meta] Assert we do not use eval() when executing with SystemPrincipal) 也不清楚会不会移除这个 flag。 版本 70.0a1(2019-08-10) uc 引导脚本可能失效。 如果使用了alice 的引导脚本(userChrome.js 版本 v3.0.58mod)的话。 将 doc instanceof XULDocument 改为 doc.constructor.name === 'XULDocument' 或等待原作者更新。(已更新 https://github.com/alice0775/userChrome.js/blob/master/70/userChrome.js) |
|
1楼#
发布于:2020-05-27 16:03
|
|
|
2楼#
发布于:2020-05-27 13:36
liuxb:求楼主出手帮忙,谢谢! showImageInit = function(){ mItem = document.createXULElement("menuitem"); mItem.setAttribute("label", "Reload Missing Images"); //mItem.setAttribute("accesskey", "C"); document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function(){ onPopupShowing(this); }, false); } onPopupShowing = function(aPopup){ aPopup.insertBefore(mItem, document.getElementById("context-copyimage")); mItem.setAttribute("oncommand", "BrowserReloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_CHARSET_CHANGE);"); mItem.hidden = !(gContextMenu.onImage && !gContextMenu.onCompletedImage); mItem.setAttribute("disabled", mItem.hidden); } showImageInit();我也不知道有没有修复。 |
|
3楼#
发布于:2020-05-27 06:53
求楼主出手帮忙,谢谢!
下面脚本作用是在没有加载完成的图片占位符红叉上增加一个菜单项,点击后会重新加载所有未加载的图片。 现在功能失效了,在正常图片上右键菜单中也显示,而且即使在红叉图片上点击,也完全不起作用。1 showImageInit = function(){ mItem = document.createXULElement("menuitem"); mItem.setAttribute("label", "Reload Missing Images"); //mItem.setAttribute("accesskey", "C"); document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function(){ onPopupShowing(this); }, false); } onPopupShowing = function(aPopup){ aPopup.insertBefore(mItem, document.getElementById("context-copyimage")); mItem.setAttribute("oncommand", "gBrowser.selectedTab.reloadWithFlags(nsIWebNavigation.LOAD_FLAGS_CHARSET_CHANGE);"); mItem.hidden = !(gContextMenu.onImage && (!gContextMenu.target.naturalWidth || !gContextMenu.target.complete)); mItem.setAttribute("disabled", mItem.hidden); } showImageInit(); |
|
|
4楼#
发布于:2019-10-16 15:57
编辑掉
找到解决方法了 |
|
5楼#
发布于:2019-09-12 09:29
@333ywb 你好,我也有你的那几个脚本,能把你改好的脚本共享下么?谢谢
|
|
6楼#
发布于:2019-09-10 11:59
zhouhuajdsh:请问下都可以,只是前者这么做是为了向下兼容。 |
|
7楼#
发布于:2019-09-10 02:13
请问下
location == 'chrome://browser/content/browser.xul'是不是只能替换成 location.href.startsWith('chrome://browser/content/browser.x')我看有的人写的脚本里是就只把xul改成了xhtml location == 'chrome://browser/content/browser.xhtml' |
|
8楼#
发布于:2019-09-09 17:38
|
|
9楼#
发布于:2019-09-09 14:31
|
|
10楼#
发布于:2019-09-09 14:25
lonely_8:86、87 楼分别参考这两贴第一个参考86楼已经解决。 第二个参考87楼,尚有部分BUG,【复制当前标签标题】、【复制当前标签地址】、【复制当前标签标题和地址】、【复制当前标签源代码】无效果,其他有效。 谢谢! |
|
11楼#
发布于:2019-09-09 13:10
kidzgy:AddMenuPlus.uc存在问题,就是对着标签右键,复制当前标签标题和地址等项下所有功能均失效。感觉小弟提出的问题有点多了,真不好意思,有劳大佬,谢谢!回到原帖86、87 楼分别参考这两贴 https://www.firefox.net.cn/read-121131#read_368568 https://www.firefox.net.cn/read-121198 |
|
12楼#
发布于:2019-09-09 12:34
AddMenuPlus.uc存在问题,就是对着标签右键,复制当前标签标题和地址等项下所有功能均失效。
图片:微信截图_20190909123239.png ![]() ![]() |
|
|
13楼#
发布于:2019-09-09 02:08
这个脚本部分功能无法使用,即在标签右键,“用IE打开标签”,没有效果。除此之外,其他都能正常使用。不知能否修复,谢谢!
// ==UserScript== // @name OpenWith.uc.js // @description 用其他浏览器打开页面、链接、书签及标签 // @author ding // @include main // @version 2018.2.3.1 // @homepageURL https://bbs.kafan.cn/thread-2114879-1-1.html // @startup window.OpenWithManager.init(); // @shutdown window.OpenWithManager.destroy(); // @note 适配Firefox57+ // ==/UserScript== location.href.startsWith('chrome://browser/content/browser.x') && (function () { const MENU_NAME = "外部打开"; //是否使用二级菜单 const USE_MENU_AREA = false; //页面 const USE_MENU_TAB = false; //标签 const USE_MENU_PLACE = false; //书签 function getFirefoxPath(){//firefox.exe所在路径 return OS.Constants.Path.libDir; } function getRootPath() {//firefox所在盘路径 var path = getFirefoxPath(); var index = path.indexOf(":"); return path.substring(0,index+1); } //修改内容后请将脚本改名来保证加载的是最新,或使用无缓存的userChrome.js //相对路径:path: OS.Constants.Path.libDir+ "\\..\\..\\..\\Program Files\\Internet Explorer\\iexplore.exe" var browsers = { IE: { enable: true, name: "IE", path: "C:\\Program Files\\Internet Explorer\\iexplore.exe", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABDlBMVEUAAAAAf39VVao/f78zZpkqf6okbbY/f784cakqf6o6dbAvb68teLQzcrI4cbM0eLQydK4xeLE2c7A1dbAzdrMzdLEzd7Myd7E0dLAydLIzdbMydbEzdrM0drAydrI0dbI0drI0dbAzdrEydbIydrEzdrEzdbI0dbEzdbI0dbI0drI0drE0dbE0drIzdbI0dbEzdbEzdrA0dbI0dbE0drE0dbIzdbI0dbE0drIzdbI0drIzdLI0dbI0dbIydbA0dLEydrI0drIzdrI0dbE0drAydbIydrEzdLAydrIzdrA0dLIzdLI0drA0dbIydrA0dLAydLI0dLA0dLI0drA0dLAydrI0drA0dLI0dLI0drJFyzboAAAAWXRSTlMAAgMEBQYHCAkMDRARFBsiIyQqNDY7QEJERkpMVFhaXWFiY2RpbHF6fH5/g4SMj5GUlZaYm5yjpaapqq2wtLa4u77LzM3Oz9DY2tvf4Obn6uzu8PT19vj5/YY/MsoAAAC1SURBVBgZTcGJOgIBGIbRN0RmhmRQJEKTLbTZUpIi+67pu/8b8efJk3MYmSvfX+4xFPOThbDkkZ5lIH7Sk/RVcIjNY1Y+3097Mg8JpoCF8CL5pl+PHhDpHiZe1di/lSkCS+funSoQvZH0PQ05tyaVgiBoyqTAy+ifLDgvkrb8oRnYllkD1g+Mw/izzJM/kQkldWBRNY0sw0YneqU/u0C6HZk86mvgYxMzdnxdza/u1FtnORfzA76xL0zsUvxRAAAAAElFTkSuQmCC" }, Chrome:{ enable:false, name:"Chrome", path:"", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACSklEQVQ4jX2QT0jUcRDF35ufbq5pEiVRUGSUFYIV7hpCoQsiq0YUdSvBwFCoUDqU9G8LPAR1rhYEUY+ZBK6hIatLoRVmFCQdOiTZIbwklbnib6aDf3bdjR58YRjevPnOh0jRTFmZ31VtErJCzXYAgABTJjIsZDh/dHQ82c+V4nt5eQ7j8Qcg61JDk2VA+5zHc6kgFptfDfhWUpKd6fFEARz+33CShvJnZ2s5ObkgAODNytoMoDjVpYCpqvuPF5jJy2sDANb0VAUU4u26/8MH8g4AmFnUHOf6dFHRW184vAjSAMCGyzPWbKiIuQz2BrsI+M8N/fFXTMTfA/jcerThdP9W/z0SZ1VBEt1NBdHWm7ueDwqkNMHDHgoNRwjs66hcV0+ghWRzZJvvLolGAOtFkE2iMfwl0CZ0WtYCtUqhYfvSwXK74eqWF/ljY58EPJOGTVknxZExVfuVaMpOWSkp2LRg87eW3ZI6D4Et77VEqJoY8XU1BLxY21O5R8HutABDp36o9olIblLoVAaJEQAFy61ME+fRxoXxE7Men0FZB4HB0JnjeK+YyVMmZRISZW1vValBXq+9V2NCXo6cGpwIhUICAKGTb2pA6UtYYCL0EQCqnwQ7SNSncVP9KSKv+gtzj7mLvz8KuTtxEcLOgf4mAQAnM+MCVF+mc5Mcc3nN3LmWlOFhet3mJQ+AyPHIXLa7oQpAOxSrlI3ofLaf06p6Y+XbBoTpdaulcCC+xCFFwcfBQyJ2Xg1lok51316ETBmgYITmhuXgwLtk/198KfCC5H3+pQAAAABJRU5ErkJggg==" }, Edge:{ enable:false, name:"Edge", path:"microsoft-edge", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACGUlEQVRIibVWr28TcRR/4kQX2vW+7yoQiMoJBAKBqKhATCD4ExATkxMENfFNJknWZL33vkGQCgQJE4glTCAqJiYqlqwp1/u+bzKxBASiAlExUQS90vau15aVT/Lc+34+7/cdwBIoimuK7Ftke6lIBopkgMZ10NhTDOO90ru4sowjEz7HLxW7G2QZLbGhH8rB6szUKwZsz1YgnrGA7dnybKhXVOQu1iWfmLG3leP+08VlMdLMeqjY/vRZ2mhcS5GcI8mPxSKuA1p7afJGVJ+LJkJ2R4riWspZay8g+wpZhlkiZe7vpwVY2sgyUmTvsBlp0NoDrT0/lIPMiACgzP39zIxJBjP92DqRR2PyK5/sk6QfyO4rsm3ktQ2Nvc1semgPJ05BaA8VuQugXhEA4AH1HqJxHWQZbZ/IszyBgOIPCxp+OuXkTEIOAOCTfJ44ktv1G1F9kSmS8+zBkO7fMKbIFcW1fx7TOctMOWn2fxGovOmX0LjvmxKovO+XZgRKzXhnU+TIMkyXZ37ZWEZV3S7kTdFaKJpvj1Np5t2WdVHV7UJ63NzHjQkAACiWbtbSrFKqqm4XlIle5DqNj1jGfbFX2LSvJ6ckgdZewPY5GtdCsr8Wzn+CMl8rxfLlXvN//GkrVwTJ7Sqydxvd4Hn4jaie+2G5rwDA+KqyvVxnuZDd0coC0yVD41qKpavY3Uzbn18Y18Iw3ps+mgl+A9E4JERQR7sXAAAAAElFTkSuQmCC" }, Opera:{ enable:false, name:"Opera", path:"", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAABxklEQVQokYWTQWtTQRSFv3sTA0oV3FRKS4MighQRrKBYRJeCdqN5Biy4cJH/4KpL8Te4qWBtEyOCtCoILhJQlCBSRXChpAlU3AgKtaX0zXFR83xPHnhXM/d+58wZmDFS9S2KhjZ9o2boMsGO4ewj8BMPK5I9LJW27ozce74+4G2wWK1ePCtswWEUgEAbU0uyKXPOA4QQ+kV5day59CoR969On44tfuH4bgBJ98uN5ZmBca96qQFEO57hl5nOlRefdvxDFJWE5gfCACrKbqavI7aTveN7FBfmO7XJXb7XN69hHEqGQe9GHyz10uJy/dlnoU8J4xwZ/jESuUmVNIjbe3LKsJVMmsAVB05kKGktT4z0NWNmTHqwMJw9wjZyxWbrmb044A5xLvyfChB7kK9m02koDxZk+k7ouhntf7jRPLGJkWzDWw6ay0I6nptTTGRza87L9eW24MnfPD7Rq0wfTnPdyvRBnKOJj3g03lx+4wDbZjcI6iZD0239eboCc49vpRJ8KRaoQepj9GcujMVbxaY7pwBC4LWZWiabwjmzE5WXKnhUXny8lhEDaHbW+x/fVoPpOgoncfaDf7egDm53x+tLDQMN+N9FzrK3IXGG5QAAAABJRU5ErkJggg==" }, FireFox:{ enable:false, name:"FireFox", path:"", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAABHVBMVEUAAAD/f38/f7/akUjni0Xpfz/riTrsf0jyjD/Tg08jlL0hk7rpij/liULrhj7qiT7rh0HqiD/kiUbkh0EilLwjlLsrkLjdiEbhh0nfikfeh0jdiEbfiUffh0fghkbTh014jYavi2PhiEXhh0UjlLwklLvQiU7dh0jeiEXjh0Lfh0bhiUXjiUTqh0DmiEPih0Qhkrroh0LoiEHoiEIjkrq0imEjlLwolLkolLouk7Yxk7Mzk7I9k6xEkqhIkqVKkqRPkaFQkaBhkJZlkJRukI5yj4t9joR9j4WTjXeZjXOdjXGjjG6sjGiyi2S3i2C4i2C6i1+8i17Ci1rOilLRiVHSilDTiU/Xik3diUnfiEjmiUTpiELqiEDriEHsiEBADhTDAAAANnRSTlMAAgQHCwwNDhQdKy0wMjU9QlhiaY2XmJ+kqK2usrO4wsXN1dja2t3l5unr7O7v9/j6+vv7/v6MjNp+AAAAsElEQVQIHQXBA2IDAAAEwa1t27YuNdKmtrn/f0ZnAGjomlxdnequB4C28s7Nwl6So62xOqBsafT07LaQZOf8a6UJalWvkyTZ/5ivoF3Vh+MkyaUdzKl6kSTJsyNMq7/vxSTJ9p3rLKuvhSRJim+us6j6dHp1f5iUdIFBVf0s7ebgRgdoVf0ubScnLz/aAsOqf49Xd7/qEFAzoaqq49UAVf2qqn2VAEBz7+zG2kxPI8A/m2E1d8xSFegAAAAASUVORK5CYII=" }, others:{ enable:false, name:"360极速", path:"D:\\Program Files\\360Chrome\\Chrome\\Application\\360chrome.exe", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADBElEQVQ4jXWTb0zUdRzHP7FylLPMGLOF5M5MRjGmRMj946yjQZ4e4EDJWWba1oZOZz3xQbtkaxeQRiSxUbb1Z7e5zK3WKDdxi/UARJ2eBzmyc3LccbuRccfd/f7c/V49AIRovrfXs+/79dln+3xFluTdHxL5TT61fftX2pe/dqhFI/XqoH+bmrzhViKje9T3g3uDuUs799L0neJ09uoRe4/O1l5tbNit3Lz+qop/EYE65ebw2+FH/lfe9Y2y3dGjp6u6dWzdOm+2qtP91iS/b0kx/Eqaa7XKgsitRBckHk/O0Z/iec4ePWI/pWP/bJb39iQ5Uxrnx/I4580zDDhSDFWnuVozJ3JrFz3iyZGD3/Lo7q+zh21dOrbOBVrq45wqnOL0+rv4SqY5V5bgl8oZfqtKqJddsQvXG8J2ERFxeC4+uOO0dsh6Usd6Usd6YpaGA0mOL4/Slhfj04Ipzq3tJ7K6QlVWi6oW50/oNRWdHK5bKVvCJ85W3/7c91L3TMzSoWOew+LVOPRElGO5IQLLnaQeENK5gpovaOuXkXnhSWiy+eTlyY+D1kgb1mAX5i/C2UqvRqVXY7NX4/aEwfiISvJZmRWsENSnBL14BdkXC8BVFpOa6Cfj1kgb81Re8lH+cx8bv+/jyt8hQvEA2QFBfUdIPyZohUKm5HEMy9Pg3nRXXJOd1xYLKu58QOnYUTb491F4qYrjVx7CCAjZQUE/IGimHDIb8zFsJthpHpW6ya6u+bJ54kPKgsd4brQF09Vm1g2VEvlT4JZgjAnZAUErntvf8Qy8VdMq+0O9BVXh9vGl09cMuTlyowiiORAWCAncETKND8/uv3XTrekjjatERMQW6Si2hbxTi6cf/KM6TaIc4iXwzwaYWguxPIx2k9+wrZtmb+3m/5yyI+hZaf7L02kZaTl7JtrsJ+MCrRY0JygOSFkgUU6m3/66al7z/H0/lKruKMJoSGDUc4+sGzIu0Ov7AoHGZfctzwdln4ns7o8wmgcwdvkxXhsk+0ZrKrW/YOnbfwGaHza07T0rkAAAAABJRU5ErkJggg==" }, all:{ enable:false, name:"所有浏览器", image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABfVBMVEUAAAAcjbwijMIimM8nm9UnoNkooNonoN4loOLurVS+snG/xYOUtZgloN381GJEREDrrFLzvlfcynK7vn7Dv3Y1n82AsqWTup/gznL81GFEREBEREDsrVHtslP40mHoyWK0u4FfrLpBps7rz2jw0WbvzmjMrFZEREDsrlL2yVzty2AvntN0sqo1pNUqoNtKqMY9o9Fdp7d2rKTtrFPuymCvuoGYtpC8xIb30mLkyGbox2LgyWo2i7OyvYPEwHeXuZtfrr80pNX30mP40WAgiL0on9hWrL/y0mfuy2H50mAgiL0mndeCuKj302FDn8JDoMN2s6771GIgi78klMmSuZ6iv5JosLn71GEdicQhir8kntz30mPv0GYrm9NIqMn50mL+0mMfi78gj8Qnn9zRyHknot3Kx3wgjsJYprVKob0nod8nouApd5wkiLgmlMoknNUnoN8not8spt1EREAontkon9onot4not8nod7yzWDwy2D71GL602IpndcpnNWyKzl3AAAAdHRSTlMAG3+r3PXXiRtbrbzE9FsBXcbGw8by3NjHWQEEHNz04MPb59LWzSAFi8Hw+N/4/N7q1nrW18TEwPHW3bjnw8XC1PHq+Pj419nr+NTbxujm5crSh7/DwNCFGt305Nb84fEXWMT+w/1OvdHg8FMgf6zX0IIXCfpjDT4AAADLSURBVBgZXcGxK0QBHMDx7ze5Uq+ewfSyKHJ1SREWkwy6UtcNItNl8dfYGCxMSgYpdZMy4wpdBmHFovAG9Yafd5fJ5yP/SMk/P4DAkLqt7vlFKgzbsxUH9jGqm0e6xol9VG2cqXXalt5lVl0K4NJSVxbtmYfrBePqQpZ1jpu3FW9nYqDTlrpOw31t8E5rD6fSdPx5kseqUbxMPB3LunandCyKeNVDoaV2VqMIPtxPBVoVHSmCb3czBbKmWlR0J9s4F9IkyfNPSmmS5L+9fjn4t8/zTwAAAABJRU5ErkJggg==" } }; if (window.OpenWithManager) { window.OpenWithManager.destroy(); delete window.OpenWithManager; } function $(id) { return document.getElementById(id); } window.OpenWithManager = { useMenu: false, getTypeDesc: function (type) { switch (type) { case "page": return "本页"; case "link": return "链接"; case "tab": return "标签"; case "bm": return "书签"; } return ""; }, buildMenuName: function (label, type) { return "用 " + label + " 打开" + this.getTypeDesc(type); }, attachNode: function (anchorNode, node) { if (this.useMenu) { anchorNode.appendChild(node); } else { anchorNode.parentNode.insertBefore(node, anchorNode); } }, createMenuPopup: function (anchorNode, type) { let menu = document.createXULElement("menu"); menu.setAttribute("label", MENU_NAME); menu.setAttribute("accesskey", "O"); menu.setAttribute("id", "openwith-menu-" + type); menu.setAttribute("class", "menu-iconic openwith-menu open-" + type); menu.setAttribute("image", browsers.all.image); anchorNode.parentNode.insertBefore(menu, anchorNode); let popup = document.createXULElement("menupopup"); popup.id = "openwith-popup-" + type; menu.appendChild(popup); return popup; }, createMenuItem: function (anchorNode, id, browser, type) { let menuitem = document.createXULElement("menuitem"); menuitem.id = "openwith-m-" + type + "-" + id; menuitem.setAttribute("label", this.buildMenuName(browser.name, type)); menuitem.setAttribute("oncommand", "OpenWithManager.openWithOtherBrowser(this,'" + id + "','" + type + "')"); menuitem.setAttribute("class", "menuitem-iconic openwith-menuitem open-" + type); if (browser.image) { menuitem.setAttribute("image", browser.image); } this.attachNode(anchorNode, menuitem); }, createBrowserMenu: function (anchorNode, type) { for (let key in browsers) { try { if (browsers[key].enable) { this.createMenuItem(anchorNode, key, browsers[key], type); } } catch (e) { alert(e.message); } } }, //contentAreaContextMenu initContentAreaMenu: function () { var inspos = $("inspect-separator"); let sep = document.createXULElement("menuseparator"); sep.setAttribute("class", "openwith-menuitem"); sep.setAttribute("hidden", "true"); inspos.parentNode.insertBefore(sep, inspos); this.useMenu = USE_MENU_AREA; var anchorNode; if (this.useMenu) { anchorNode = this.createMenuPopup(inspos, "area"); } else { anchorNode = inspos; } //链接部分 this.createBrowserMenu(anchorNode, "link"); //控制链接菜单的显示 inspos.parentNode.addEventListener("popupshowing", this, false); //页面部分 this.createBrowserMenu(anchorNode, "page"); }, //tabContextMenu initTabContextMenu: function () { var inspos = $("context_closeOtherTabs"); let sep = document.createXULElement("menuseparator"); sep.setAttribute("class", "openwith-menuitem"); inspos.parentNode.insertBefore(sep, inspos.nextSibling); this.useMenu = USE_MENU_TAB; var anchorNode; if (this.useMenu) { anchorNode = this.createMenuPopup(sep.nextSibling, "tab"); } else { anchorNode = sep.nextSibling; } this.createBrowserMenu(anchorNode, "tab"); }, //placesContext initPlacesContextMenu: function () { var inspos = $("placesContext_openSeparator"); //let sep = document.createXULElement("menuseparator"); //inspos.parentNode.insertBefore(sep, inspos); this.useMenu = USE_MENU_PLACE; var anchorNode; if (this.useMenu) { anchorNode = this.createMenuPopup(inspos, "place"); } else { anchorNode = inspos; } this.createBrowserMenu(anchorNode, "place"); //文件夹显示 inspos.parentNode.addEventListener("popupshowing",this, false); }, handleEvent: function (event) { if(event.target.id=="placesContext"){ var isFloder = false; try { let selectedNode = PlacesUIUtils.getViewForNode(event.target.ownerDocument.popupNode).selectedNode; isFloder = !selectedNode || selectedNode.hasChildren; } catch (e) { } let menus = $("placesContext").querySelectorAll(".open-place"); for (let menu of menus) { if (isFloder) { menu.hidden = true; } else { menu.hidden = false; menu.disabled = false; } } } if(event.target.id=="contentAreaContextMenu"){ let menus = $("contentAreaContextMenu").querySelectorAll(".open-link"); let menuspage = $("contentAreaContextMenu").querySelectorAll(".open-page"); for (let menu of menus) { if (gContextMenu.onLink) { menu.hidden = false; } else { menu.hidden = true; } } for (let menu of menuspage) { if (gContextMenu.onLink) { menu.hidden = true; } else { menu.hidden = false; } } } }, init: function () { //contentAreaContextMenu this.initContentAreaMenu(); //tabContextMenu this.initTabContextMenu(); //placesContext this.initPlacesContextMenu(); }, destroy:function () { $("contentAreaContextMenu").removeEventListener("popupshowing", this, false); $("placesContext_openSeparator").removeEventListener("popupshowing", this, false); let menus = document.querySelectorAll(".openwith-menu"), menuitems = document.querySelectorAll(".openwith-menuitem"); for(let menuitem of menuitems){ menuitem.parentNode.removeChild(menuitem); } for(let menu of menus){ menu.parentNode.removeChild(menu); } }, openWithBrowser: function (url, path) { if (!path) { alert("浏览器路径未设置 "); return; } if (path == "microsoft-edge") { //edge用url打开 var cmdUrl = path + ":" + url; let win = window.openDialog(cmdUrl, "", "chrome"); win.close(); return; } let clientApp = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); clientApp.initWithPath(path); if (!clientApp.exists()) { alert("浏览器路径错误: " + path); return; } try { let ss = Cc["@mozilla.org/browser/shell-service;1"] .getService(Ci.nsIShellService); ss.openApplicationWithURI(clientApp, url); } catch (e) { let p = Cc["@mozilla.org/process/util;1"] .createInstance(Ci.nsIProcess); p.init(clientApp); p.run(false, [url], 1); } }, openWithOtherBrowser : function (obj, id, type) { var url; switch (type) { case "page": url = gBrowser.currentURI.spec; break; case "link": url = gContextMenu.linkURL; break; case "tab": { let tab = document.popupNode && document.popupNode.localName == "tab" ? document.popupNode : null; let bw = tab && tab.linkedBrowser; url = bw && bw.documentURI.spec; } break; case "place": url = PlacesUIUtils.getViewForNode(document.popupNode).selectedNode.uri; break; } if (url) { if (id == "all") { for (let key in browsers) { let browser = browsers[key]; if (browser.enable && key != "all" && browser.path) { this.openWithBrowser(url, browser.path); } } } else { let browser = browsers[id]; this.openWithBrowser(url, browser.path); } } } }; OpenWithManager.init(); })(); |
|
14楼#
发布于:2019-09-08 21:01
|
|
上一页
下一页