WRFan
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору я тут такой здоровский скриптик накатал, любо дорого смотреть. подробно описал тута: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1363220&SiteID=1 дело в следующем: когда открываешь страницы с большим количеством картинок, браузеры (особенно ИЕ, любые версии) некоторые картинки не открывают, как будто их на сёрвере нет, а они есть. помоему это как то связано с количеством одновремененных соединений, которые система или браузер поддерживают. вот я и задумал накатать скриптик для проксомитрона, который бы проверял все картинки на странице и если какие не открылись, чтобы браузер их заново скачивал и в страницу вставлял. с разными там операми и лисицами я не разбираюсь, но ИЕ поддерживает функции Код: - swapNode - insertadjacentElement / removeNode | это нужно, потому что ИЕ не поддерхивает релоад имедж объектов без релоада документа в целом. я просто напросто приказал ИЕ менять картинку на самое себя! лол. звучит смешно, но работало на все 100 под ИЕ6. а вот в ИЕ7 перестало. он не качает картинку заново с сервака, этакие злюки эти микрозофтцы, всё портят. поэтому я придумал следующее - качаем картинки через XMLHttp или WinHttp объекты на харддиск и потом меняем картинку не на себя саму, а на скаченную картинку, т.е. с человеческой точки зрения это конечно та же самая картинка, но браузер - он же дурак, не разбирается. накатал скрипт, не работает. в чём дело? а дело в следующем: эти вредные микрозофтцы полностью перекрыли доступ ко всем функциям ИЕ в интернет зоне (зона номер 3 на микрозофтском слэнге). и главное, никакой возможности включить эти функции, т.е. включить их можно через gpedit, но ИЕ их спокойно игнорирует, находясь в интернет зоне. не говоря уж о том, что activex объекты для записи на локальный харддиск не являются безопасными, а разрешать использование небезопасных объектов в интернет зоне очень глупо, совсем не объйзательно давать доступ к shell.application или к WMI объектам каким то неизвестным сайтам, так в два счёта реестр удалят, пикнуть не успеешь. в общем, облазив весь интернет и отмониторив запросы ИЕ к реестру, мне удалось найти решение. надо просто напросто обхитрить ИЕ и внести все интернет сайты, т.е. http и https протоколы в зону доверенных сайтов (зона номер 2). потом так настроить эту зону через gpedit, чтобы опасные activex и .NET объекты автоматически не использовались и не скачивались. в этой зоне ИЕ действительно следует указаниям пользователя, т.е. например если я даю разрешение на скачивание файлов на харддиск через activex, то ИЕ и будет это делать, а в интернет зоне он моё разрешение просто игнорирует, мерзавец этакий. вот в общем сначала скрипт (на jscript-е) и дополнительные настройки для реестра, которые переносят интернет зону ПОЛНОСТЬЮ в зону доверенных сайтов, а также маркируют ADODB.Stream как безопасный объект. хотя, он совсем и небезопасный, но я готов пойти на определённый риск, лишь бы мне дали возможность спокойно программировать. устал от permission denied жалоб Код: function IE_IMG_Bug() { var theImages_length = document.images.length if (theImages_length > 0) { ADOStream = new ActiveXObject("ADODB.Stream"); MSXML = new XMLHttpRequest() //MSXML = new ActiveXObject("WinHttp.WinHttpRequest.5.1") //MSXML = new ActiveXObject("Msxml2.XMLHTTP.6.0"); var theImages = document.body.getElementsByTagName("IMG"); for (var theImagesCount = 0; theImagesCount < theImages_length; theImagesCount++) { if (theImages[theImagesCount].fileSize < 0) { MSXML.open ("GET", theImages[theImagesCount].src, false) MSXML.send(); ADOStream.type = 1 ADOStream.Open ADOStream.Write (MSXML.responseBody) x = theImages[theImagesCount].src.length; while((theImages[theImagesCount].src.substring(x,x-1)) != "."){ x--; } clipend = x; while((theImages[theImagesCount].src.substring(x,x-1)) != "/"){ x--; } clipstart = x; pathnameFileName = theImages[theImagesCount].src.substr(clipstart,theImages[theImagesCount].src.length) pathi = "C:\\Users\\WRFan\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\" + pathnameFileName ADOStream.SaveToFile (pathi, 2) //Safety settings on this computer prohibit accessing a data source on another domain. ADOStream.Close oClone = document.createElement("IMG") oClone.src = pathi theImages[theImagesCount].swapNode(oClone) } } } } document.onreadystatechange=fnStartInit; function fnStartInit() { if (document.readyState=="complete") { window.setTimeout("IE_IMG_Bug()", 100); } } | Код: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility\{00000566-0000-0010-8000-00AA006D2EA4}] "Compatibility Flags"=dword:00000000 | Код: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\CLSID\{00000566-0000-0010-8000-00AA006D2EA4}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}] | Код: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\ProtocolDefaults] @="" "@ivt"=dword:00000001 "file"=dword:00000003 "ftp"=dword:00000003 "http"=dword:00000002 "https"=dword:00000002 "shell"=dword:00000000 "ldap"=dword:00000004 "news"=dword:00000004 "nntp"=dword:00000004 "oecmd"=dword:00000004 "snews"=dword:00000004 |
|