пробовал сам удалить "загружать только с этого сайта", не выходит
Попробую угадать:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Eimage%20show-hide%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pref%3D%27permissions.default.image%27%3B%0Athis.setState%3Dfunction%28%29%7B%0Aswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0Acase%201%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%7D%3B%20break%3B%0Acase%202%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%27%3B%0A%20%7D%3B%20break%3B%0A%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C2%29%3Bbreak%3B%0A%09case%202%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
voqabuhe
Ты бы выкладывал свои кнопки в Готовые кнопки для Custom Buttons
Немного улучшил, так что теперь сохраняются только css правила, которые используются на странице и добавил туда.
Добавлено 14-11-2012 11:52:00
Dumby
Для полного счастья не хватает картинок, которые через CSS подключаются...
С этим пока хуже, их сложнее сохранить.
Отредактировано Lex1 (14-11-2012 11:52:00)
Отсутствует
их сложнее сохранить.
Это точно, я пробовал - никак...
Вдруг пригодится, жмякни на этой странице, должно сконвертировать
и открыть во вкладке тёмно-синюю полоску, которая наверху (DIV id="brdtitle").
const pr = content.document.location.protocol; const url = pr + "//forum.mozilla-russia.org/style/img/Moz-infinity/pun_head_bg.png"; var req = new XMLHttpRequest(); req.open("GET", url, true /* false */); req.responseType = "blob"; req.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_FROM_CACHE; req.onload = function() { var reader = new FileReader(); reader.onload = function() { var result = "data:" + req.response.type + ";base64," + btoa(reader.result); gBrowser.addTab(result); } reader.readAsBinaryString(req.response); } req.send(null);
Отредактировано Dumby (14-11-2012 16:14:01)
Отсутствует
Попробую угадать:
Ну Вы прямо точно угадали, как будто знали))) Спасибо. А можно еще спросить, а вот чтобы при переключении режима и страница автоматически перезагружалась, чоб не руками перезагружать, если сложно то и ладно, чай не принц какой.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
Так сойдёт ?
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Eimage%20show-hide%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pref%3D%27permissions.default.image%27%3B%0Athis.setState%3Dfunction%28%29%7B%0Aswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0Acase%201%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%7D%3B%20break%3B%0Acase%202%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%27%3B%0A%20%7D%3B%20break%3B%0A%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C2%29%3Bbreak%3B%0A%09case%202%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%0AgBrowser.loadURIWithFlags%28%0A%09content.document.location.href%2C%0A%09Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE%0A%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
req.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_FROM_CACHE;
Всё равно иногда лезет перезагружать, так что всё зря
Отредактировано Dumby (14-11-2012 18:35:59)
Отсутствует
Dumby
Тем не менее так лучше, чем ничего:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESave%20snapshot%20to%20html%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACaUlEQVR4AX3BTWvcVRTA4d+592am/5lp0qSxtEtRxI0oVmipuBFEEDfd1IUvCz+RO3du/QAqCgUjxULdWKFV8AUkapg0pplM5uX/cu85x7RQlDb4PPL62++8ubq68cLZjXPnY2hnKYk4JxMgZ/fpvHe6bo72tr745OO0trb+4pVLb1x7/92rFzfXIQr/a1kbX34T2Lrx2d350Uefpq4znc6y/b0Ho8oZVII5J4oC81qZTAL1YhmAXnK12LUqB1O40Br9fkQLT3DAIjQNLBsw1wBIKmahbkucTKFtjdxFioI7T4gRcnG0tJgVASSVUmKXS6hrJXeQC+QC5iD8h0NaAS2Cu6FFAxCCqkZVDWYKIjwiPEZ4SBzMCmo5AJJULWIau7ZlZ6zMZhV1q5g5j0sxcP+gpl4qZhqAmLTkBBbNnZvfjTk8zBxMWprWcAd3HhJxhoNEVSWGowsE0QBI6nIOajnEFEkp8Orl8wxHQ4QCKCJOjByL/PLbnB/u7DIYRFRLAELKucSmzuHPnTmT/TFX33qK61vbLGp479qzbG70eGR9NXHj258Yjc7h5gEIIecS6yaHxaJlWS9ZLjPf3x5z89Yuh9PMA/cnsLsPh9NMFMetYFYCEII7vRh7vapaReQUm2d6fPjBZV678hxrp3s80O9DFJBwin5/QFWtEWMvATGpFp8e3bOd8W0O9u/w1deZiy8/zysvLfj19xk//mzMF4W2c7b/2NPtv+52Kk11eHSPYyKD1bOXzMozpbRPSwjkpgiChJWAZ8UViBwTQSSnldjgVsXUm5Wm+Vz41xDoAwIETuaAAy3QAf4PtuhVEPpvXZEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20resolveURL%20%3D%20function%20%28baseURL%2C%20relURL%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20uri%20%3D%20Cc%5B%22@mozilla.org/network/standard-url%3B1%22%5D.createInstance%28Ci.nsIURI%29%3B%0A%20%20%20%20%20%20%20%20uri.spec%20%3D%20baseURL%3B%0A%20%20%20%20%20%20%20%20return%20uri.resolve%28relURL%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%20%28e%29%20%7BLOG%28e%29%7D%0A%7D%3B%0Avar%20getSelWin%20%3D%20function%20%28w%29%20%7B%0A%20%20%20%20if%20%28w.getSelection%28%29.toString%28%29%29%20return%20w%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%2C%20f%2C%20r%3B%20f%20%3D%20w.frames%5Bi%5D%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28r%20%3D%20arguments.callee%28f%29%29%20return%20r%0A%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20%7D%0A%7D%3B%0Avar%20ele%2C%20pEle%2C%20clone%2C%20win%20%3D%20document.commandDispatcher.focusedWindow%20%3D%3D%20%27%5Bobject%20Window%5D%27%20%3F%20document.commandDispatcher.focusedWindow%20%3A%20content%3B%0Avar%20doc%20%3D%20win.document%2C%20loc%20%3D%20win.location%3B%0Avar%20selWin%20%3D%20getSelWin%28win%29%3B%0Aif%20%28selWin%29%20%7B%0A%20%20%20%20var%20rng%20%3D%20selWin.getSelection%28%29.getRangeAt%280%29%3B%0A%20%20%20%20pEle%20%3D%20rng.commonAncestorContainer%3B%0A%20%20%20%20ele%20%3D%20rng.cloneContents%28%29%3B%0A%20%20%20%20doc%20%3D%20selWin.document%3B%0A%20%20%20%20loc%20%3D%20selWin.location%0A%7D%20else%20%7B%0A%20%20%20%20pEle%20%3D%20doc.documentElement%3B%0A%20%20%20%20ele%20%3D%20%28doc.body%20%7C%7C%20doc.getElementsByTagName%28%27body%27%29%5B0%5D%29.cloneNode%28true%29%0A%7D%3B%0Awhile%20%28pEle%29%20%7B%0A%20%20%20%20if%20%28pEle.nodeType%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20clone%20%3D%20pEle.cloneNode%28false%29%3B%0A%20%20%20%20%20%20%20%20clone.appendChild%28ele%29%3B%0A%20%20%20%20%20%20%20%20ele%20%3D%20clone%0A%20%20%20%20%7D%3B%0A%20%20%20%20pEle%20%3D%20pEle.parentNode%0A%7D%3B%0Avar%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0Asel.appendChild%28ele%29%3B%0A%0Afor%20%28var%20el%2C%20all%20%3D%20sel.getElementsByTagName%28%27*%27%29%2C%20i%20%3D%20all.length%3B%20i--%3B%29%20%7B%0A%20%20%20%20el%20%3D%20all%5Bi%5D%3B%0A%20%20%20%20for%28var%20att%20%3D%20el.attributes%2C%20j%20%3D%20att.length%3B%20j--%3B%29%7B%0A%20%20%20%20%20%20%20%20if%28/%5Eon%5Ba-z%5D+%24/i.test%28att%5Bj%5D.name%29%29el.removeAttribute%28att%5Bj%5D.name%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20switch%20%28el.nodeName.toLowerCase%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27link%27%3A%0A%20%20%20%20%20%20%20%20case%20%27script%27%3A%20el.parentNode.removeChild%28el%29%3B%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27a%27%3A%20%0A%20%20%20%20%20%20%20%20case%20%27area%27%3A%20if%28el.hasAttribute%28%27href%27%29%20%26%26%20el.getAttribute%28%27href%27%29.charAt%280%29%20%21%3D%20%27%23%27%29el.href%20%3D%20el.href%3B%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27img%27%3A%0A%20%20%20%20%20%20%20%20case%20%27input%27%3A%0A%20%20%20%20%20%20%20%20case%20%27embed%27%3A%0A%20%20%20%20%20%20%20%20case%20%27frame%27%3A%0A%20%20%20%20%20%20%20%20case%20%27iframe%27%3A%20if%28el.hasAttribute%28%27src%27%29%29el.src%20%3D%20el.src%3B%20break%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Avar%20canvas%20%3D%20doc.createElement%28%27canvas%27%29%2C%20image%20%3D%20doc.createElement%28%27img%27%29%3B%0Avar%20imgs%20%3D%20sel.getElementsByTagName%28%27img%27%29%3B%0Afor%28var%20i%20%3D%200%2C%20img%3B%20img%20%3D%20imgs%5Bi%5D%3B%20i++%29%7B%0A%20%20%20%20if%28img.complete%29%20try%7B%0A%20%20%20%20%20%20%20%20canvas.width%20%3D%20img.width%3B%0A%20%20%20%20%20%20%20%20canvas.height%20%3D%20img.height%3B%0A%20%20%20%20%20%20%20%20canvas.getContext%28%272d%27%29.drawImage%28img%2C%200%2C%200%29%3B%0A%20%20%20%20%20%20%20%20img.src%20%3D%20canvas.toDataURL%28/%5C.%28gif%7Cpng%29/i.test%28img.src%29%20%3F%20%27image/png%27%20%3A%20%27image/jpeg%27%29%3B%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%3B%0A%7D%3B%0A%0Avar%20head%20%3D%20ele.insertBefore%28doc.createElement%28%27head%27%29%2C%20ele.firstChild%29%3B%0Avar%20meta%20%3D%20doc.createElement%28%27meta%27%29%3B%0Ameta.httpEquiv%20%3D%20%27content-type%27%3B%0Ameta.content%20%3D%20%27text/html%3B%20charset%3Dutf-8%27%3B%0Ahead.appendChild%28meta%29%3B%0Avar%20tEle%20%3D%20doc.getElementsByTagName%28%27title%27%29%5B0%5D%3B%0Aif%20%28tEle%29%20head.appendChild%28tEle.cloneNode%28true%29%29%3B%0A%0Ahead.copyStyle%20%3D%20function%20%28s%29%20%7B%0A%20%20%20%20if%20%28%21s%29%20return%3B%0A%20%20%20%20var%20style%20%3D%20doc.createElement%28%27style%27%29%3B%0A%20%20%20%20style.type%20%3D%20%27text/css%27%3B%0A%20%20%20%20if%20%28s.media%20%26%26%20s.media.mediaText%29%20style.media%20%3D%20s.media.mediaText%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%2C%20rule%3B%20rule%20%3D%20s.cssRules%5Bi%5D%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule.type%20%21%3D%203%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28%28%21rule.selectorText%20%7C%7C%20rule.selectorText.indexOf%28%27%3A%27%29%20%21%3D%20-1%29%20%7C%7C%20%28%21sel.querySelector%20%7C%7C%20sel.querySelector%28rule.selectorText%29%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20css%20%3D%20%21rule.cssText%20%3F%20%27%27%20%3A%20rule.cssText.replace%28/%28url%5C%28%22%29%28.+%3F%29%28%22%5C%29%29/g%2C%20function%20%28all%2C%20prev%2C%20url%2C%20next%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%27data%3A%27%29%20%3D%3D%200%29%20return%20all%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21/%5Ehttps%3F%3A%5C/%5C//.test%28url%29%29%20url%20%3D%20resolveURL%28s.href%20%7C%7C%20loc.href%20%2C%20url%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28rule.type%20%3D%3D%201%20%26%26%20rule.style%20%26%26%20rule.style.backgroundImage%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20image.src%20%3D%20url%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28image.complete%29%20try%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20canvas.width%20%3D%20image.width%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20canvas.height%20%3D%20image.height%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20canvas.getContext%28%272d%27%29.drawImage%28image%2C%200%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20url%20%3D%20canvas.toDataURL%28%27image/png%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20prev%20+%20url%20+%20next%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20style.appendChild%28doc.createTextNode%28css%20+%20%27%5Cn%27%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.copyStyle%28rule.styleSheet%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28s.ownerNode%29%20style%20%3D%20s.ownerNode.cloneNode%28false%29%0A%20%20%20%20%7D%3B%0A%20%20%20%20this.appendChild%28style%29%0A%7D%3B%0Avar%20sheets%20%3D%20doc.styleSheets%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20sheets.length%3B%20i++%29%20head.copyStyle%28sheets%5Bi%5D%29%3B%0Ahead.appendChild%28doc.createTextNode%28%27%5Cn%27%29%29%3B%0A%0Avar%20doctype%20%3D%20%27%27%2C%20dt%20%3D%20doc.doctype%3B%0Aif%20%28dt%20%26%26%20dt.name%29%20%7B%0A%20%20%20%20doctype%20+%3D%20%27%3C%21DOCTYPE%20%27%20+%20dt.name%3B%0A%20%20%20%20if%20%28dt.publicId%29%20doctype%20+%3D%20%27%20PUBLIC%20%5Cx22%27%20+%20dt.publicId%20+%20%27%5Cx22%27%3B%0A%20%20%20%20if%20%28dt.systemId%29%20doctype%20+%3D%20%27%20%5Cx22%27%20+%20dt.systemId%20+%20%27%5Cx22%27%3B%0A%20%20%20%20doctype%20+%3D%20%27%3E%5Cn%27%0A%7D%3B%0Avar%20fileName%20%3D%20selWin%20%3F%20selWin.getSelection%28%29.toString%28%29%20%3A%20%28tEle%20%26%26%20tEle.text%20%3F%20tEle.text%20%3A%20loc.pathname.split%28%27/%27%29.pop%28%29%29%3B%0AfileName%20%3D%20fileName.replace%28/%5B%3A%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%27_%27%29.replace%28/%5Cs+/g%2C%20%27%20%27%29.slice%280%2C%20100%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%20%27%27%29%3B%0AfileName%20+%3D%20%28function%20%28%29%20%7B%0A%20%20%20%20var%20d%20%3D%20new%20Date%28%29%2C%20z%20%3D%20function%28n%29%7Breturn%20%27_%27%20+%20%28n%20%3C%2010%20%3F%20%270%27%20%3A%20%27%27%29%20+%20n%7D%3B%0A%20%20%20%20return%20z%28d.getHours%28%29%29%20+%20z%28d.getMinutes%28%29%29%20+%20z%28d.getSeconds%28%29%29%3B%0A%7D%29%28%29%3B%0Aif%28%21/%5C.html%3F%24/.test%28fileName%29%29fileName%20+%3D%20%27.html%27%3B%0A%0AsaveURL%28%27data%3Atext/html%3Bcharset%3Dutf-8%2C%27%20+%20encodeURIComponent%28doctype%20+%20sel.innerHTML%20+%20%27%5Cn%3C%21--%20This%20document%20saved%20from%20%27%20+%20%28loc.protocol%20%21%3D%20%27data%3A%27%20%3F%20loc.href%20%3A%20%27data%3Auri%27%29%20+%20%27%20--%3E%27%29%2C%20fileName%2C%20null%2C%20false%2C%20false%2C%20null%2C%20doc%29%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано Lex1 (17-11-2012 18:57:19)
Отсутствует
Lex1
Да, наверно лучше, но теперь, например, эту страницу нормально не сохраняет
И, если совсем уж капризничать: возможно ли, чтобы в сохранённой странице
кликались ссылки, те, которые в пределах этой страницы перебрасывают в другое место на ней ?
UPD: Да, и зря убрал createTextNode(... + '\n') , красивее ведь...
Отредактировано Dumby (15-11-2012 13:02:50)
Отсутствует
Отсутствует
Как получить название текстового файла(.txt) при сохранении. Сохраняется файл с выбором папки и указанием названия, мне нужно получить название файла что бы потом добавлять текст в этот файл без запроса. Нужно для кнопки Stf (Firefox, SeaMonkey)
Вот как я собираюсь получить каталог для записи:
// Выбор папки и получение пути к папке, иначе отдаст 'false' ................................... function getPathToFolder() { // получить прошлую папку для сохранения из 'about:config' или диск C: .... var pathToFolder = Application.prefs.getValue("CB.Stf.folderToSave", 0) var pathToFolder = ( pathToFolder == 0 )? "C:\\": pathToFolder; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); var dd = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); // диалог создания и установки пути .... fp.init( window, "Укажите путь к папке!", fp.modeGetFolder ); dd.initWithPath( pathToFolder ); fp.displayDirectory = dd; if ( fp.show() == fp.returnCancel ) return false; // получить путь к выбранной папке и записать в 'about:config' .... pathToFolder = fp.file.path; Application.prefs.setValue("CB.Stf.folderToSave", pathToFolder += ( pathToFolder[pathToFolder.length - 1] !== "\\")? "\\": ""); return pathToFolder; }; custombuttons.alertBox("Каталог для записи", "Установлен путь: " + getPathToFolder() );
Отредактировано bunda1 (16-11-2012 22:35:36)
Отсутствует
bunda1
Может это как-то сможет помочь: эта кнопка сохраняет выделенный текст в файл на раб. столе с текущей датой в имени файла и дописывает в него же, при повторных нажатиях.
var text = getString(); if (text == "") { return; } else { SaveText(); } function SaveText() { var directoryService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties); var desktopFolder = directoryService.get('Desk', Components.interfaces.nsIFile); var desktopPath = desktopFolder.QueryInterface(Components.interfaces.nsILocalFile).path; var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); var fileName = getFileName(); file.initWithPath(desktopPath); file.append(fileName); if (file && file.exists()) { pttlAppend(file); } else { saveDefault(file); } } function manipulateString(text) { var l = text.length; if (l == 0) return ""; while (text[0] == " ") { text = text.slice(1, l); } l = text.length; while (text[l - 1] == " ") { text = text.slice(0, l - 1); l = text.length; } return text; } function getString() { var hlText = ""; var focusedWindow = document.commandDispatcher.focusedWindow; hlText = focusedWindow.getSelection.call(focusedWindow); hlText = hlText.toString(); hlText = manipulateString(hlText); return hlText; } function getPttlDivisor() { var now = new Date(); var thisYear = now.getFullYear(); var thisMonth = now.getMonth() + 1; var thisDate = now.getDate(); var thisHours = now.getHours(); var thisMinutes = now.getMinutes(); var thisSeconds = now.getSeconds(); var thisTime = new Array(thisYear, thisMonth, thisDate, thisHours, thisMinutes, thisSeconds); var webNav = getBrowser().webNavigation; var pttlTimeDiv = ""; var winTitle = webNav.document.title; var winURL = webNav.currentURI.spec; for (var i = 0; i < 6; i++) { if (thisTime[i] < 10) thisTime[i] = "0" + thisTime[i]; } pttlTimeDiv = pttlTimeDiv + winTitle + " - (" + winURL + ")"; pttlTimeDiv = pttlTimeDiv + "\u000D\u000A" + thisTime[0] + "/" + thisTime[1] + "/" + thisTime[2] + " " + thisTime[3] + ":" + thisTime[4] + ":" + thisTime[5]; pttlTimeDiv = pttlTimeDiv + "\u000D\u000A" + "----------------------------------\u000D\u000A\u000D\u000A"; return pttlTimeDiv; } function getFileName() { var now = new Date(); var thisYear = now.getFullYear(); var thisMonth = now.getMonth() + 1; var thisDate = now.getDate(); var thisTime = new Array(thisYear, thisMonth, thisDate); var pttlTime = ""; for (var i = 0; i < 3; i++) { if (thisTime[i] < 10) thisTime[i] = "0" + thisTime[i]; pttlTime = pttlTime + thisTime[i]; if (i != 2) pttlTime = pttlTime + "-"; } pttlTime = pttlTime + ".txt"; return pttlTime; } function saveDefault(fileS) { var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream); var pttlDiv = getPttlDivisor(); stream.init(fileS, 0x02 | 0x08 | 0x20, 0664, 0); converter.init(stream, "windows-1251", 0, 0x0000); converter.writeString(pttlDiv); converter.writeString(text); converter.close(); stream.close(); } function pttlAppend(fileA) { var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream); var pttlDiv = getPttlDivisor(); stream.init(fileA, 0x02 | 0x10, 0664, 0); converter.init(stream, "windows-1251", 0, 0x0000); converter.writeString("\u000D\u000A\u000D\u000A\u000D\u000A" + pttlDiv); converter.writeString(text); converter.close(); stream.close(); }
Отсутствует
bunda1
https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIFile
Вероятно fp.file.leafName
Добавлено 16-11-2012 22:33:28
Хотя нет. Там же modeGetFolder, оно помнится файлы не возвращает. Нужно modeSave
См. https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIFilePicker
Dumby
Ну, причина того, что такую страницу
Ну это вообще не html, нужно будет добавить проверку. Скорее на body, чем на document.documentElement.nodeName.toLowerCase() != 'html'...
А вот если это сохранить, то, что-то у меня background-images не подхватываются.
Какие? Я пока вижу только background: url("//yandex.st/www/_/9CHXOBcA4ckLbVLXydIXixRDbhA.png") и не очень уверен в корректности такого пути.
Отредактировано Lex1 (16-11-2012 22:56:08)
Отсутствует
Lex1
Спасибо, все вроде получается:
// Сохранение файла с выбором var MyFile ="test"; //содержимое файла var MyFilename="test.txt"; // имя файла var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"] .createInstance(nsIFilePicker); fp.init(window, "", fp.modeSave); fp.defaultString = MyFilename; fp.appendFilters(fp.filterHTML); fp.appendFilters(fp.filterAll); //=========================================================== var MyPath = "C:\\"; // путь сохранения var dir = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); dir.initWithPath(MyPath); fp.displayDirectory = dir; //=========================================================== if(fp.show() == fp.returnCancel) return; alert(fp.file.path); alert(fp.file.leafName); var stream = Components.classes['@mozilla.org/network/file-output-stream;1'] .createInstance(Components.interfaces.nsIFileOutputStream); stream.init(fp.file, 0x02|0x20|0x08, 0666, 0); stream.write(MyFile, MyFile.length); stream.close();
Отредактировано bunda1 (16-11-2012 22:48:35)
Отсутствует
Какие?
Да нет, я же не с претензией , всего лишь спросил...
Просто у меня так: как есть, после сохранения
но, видимо, браузер замусоренный и тормознутый
Отсутствует
Lex1
Все у меня не как у людей. У Вас была кнопка Save to html с таким кодом
var scripts = sel.getElementsByTagName('script');
for (var i = scripts.length; i-- {
scripts[i].parentNode.removeChild(scripts[i])
};
var head = ele.insertBefore(doc.createElement('head'), ele.firstChild);
var meta = doc.createElement('meta');
meta.httpEquiv = 'content-type';
meta.content = 'text/html; charset=utf-8';
head.appendChild(meta);
var tEle = doc.getElementsByTagName('title')[0];
if (tEle) head.appendChild(tEle.cloneNode(true));
if (loc.protocol != 'data:') {
var bEle = doc.getElementsByTagName('base')[0];
var base = bEle ? bEle.cloneNode(false) : doc.createElement('base');
if (!base.getAttribute('href')) base.href = loc.href;
head.appendChild(base);
};
var links = doc.getElementsByTagName('link');
for (var i = 0, li; li = links[i]; i++) {
if(li.rel == 'stylesheet')head.appendChild(li.cloneNode(true));
};
var styles = doc.styleSheets;
for (var i = 0, si; si = styles[i]; i++) {
var style = doc.createElement('style');
style.type = 'text/css';
if (si.media.mediaText) style.media = si.media.mediaText;
try {
for (var j = 0, rule; rule = si.cssRules[j]; j++) {
style.appendChild(doc.createTextNode(rule.cssText + '\n'))
}
} catch(e) {
if (si.ownerNode) style = si.ownerNode.cloneNode(false)
};
head.appendChild(style)
};
var doctype = '', dt = doc.doctype;
if (dt && dt.name) {
doctype += '<!DOCTYPE ' + dt.name;
if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22';
if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22';
doctype += '>\n'
};
var fileName = win ? win.getSelection().toString() : (tEle && tEle.text ? tEle.text : loc.pathname.split('/').pop());
fileName = fileName.replace(/[:\\\/<>?*|"]+/g, '_').replace(/\s+/g, ' ').slice(0, 100).replace(/^\s+|\s+$/g, '');
if(!/\.html?$/.test(fileName))fileName += '.html';
saveURL('data:text/html;charset=utf-8,' + encodeURIComponent(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->'), fileName, null, false, false, null, doc)
P.S. Что-то как-то все перепутано с названиями кнопок, теперь на этой странице http://forum.mozilla-russia.org/viewtopic.php?id=9591&p=229 , кнопка с тем же названием Save snapshot to html что и здесь http://forum.mozilla-russia.org/viewtopic.php?id=41987&p=8 а размер сохраненных файлов разный.
Отредактировано villa7 (17-11-2012 16:33:57)
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
первая меня устраивает тем что при визуальной похожести сохраненных страниц размер сохраненного файла гораздо меньше
Там картинки не сохранялись, только их адрес.
Но вот почему-то выделенный текст, Save snapshot to html сохраняет с гораздо меньшим размером
Сохраняются только используемые стили. Если не нужны картинки, уберите выделенное:
Добавлено 17-11-2012 18:05:59
voqabuhe
Она добавляется внизу, в html.
Добавлено 17-11-2012 18:21:29
villa7
И еще, можно добавить параметр времени в название файла
Перед предпоследней строчкой - "if(!/\.html?$/.test(fileName))fileName += '.html';" - добавить:
fileName += (function () { var d = new Date(), z = function(n){return '_' + (n < 10 ? '0' : '') + n}; return z(d.getHours()) + z(d.getMinutes()) + z(d.getSeconds()); })();
Отредактировано Lex1 (17-11-2012 18:36:53)
Отсутствует
Lex1
Теперь то что нужно, спасибо большое. Только вот
Она добавляется внизу, в html.
нигде не вижу на странице, может не там смотрю.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Я тоже не вижу.
ссылку не видно!
она в самом файле html нижней строчкой прописана. Например, так:
<!-- This document saved from http://forum.mozilla-russia.org/viewtopic.php?id=9591&p=231 -->
Отредактировано Inko7 (17-11-2012 19:52:26)
Отсутствует