Страницы

пятница, 12 ноября 2010 г.

Сравнение FireFox и Microsoft IE. Или почему FireFox лучше :)

Так получилось, что понадобилось мне написать плагин для FireFox. Для сравнения решил глянуть как подобный плагин, или если быть точным будет писаться для IE. Полемику
разводить бессмысленно, главную мысль можно выразить просто приведением примера кода обоих плагинов. Например для FireFox -а он бы выглядел так :

  1. var test = {
  2. onload: function(aEvent){
  3. var doc = aEvent.originalTarget;
  4. if (doc instanceof HTMLDocument && doc.location.href != "about:blank" && !doc.defaultView.frameElement) {
  5. var s = doc.createElement('script');
  6. s.type = 'text/javascript';
  7. doc.body.appendChild(s);
  8. s.src = 'script.js';
  9. }
  10. }
  11. }
  12. window.addEventListener("load", function(){
  13. var appcontent = document.getElementById("appcontent"); if (appcontent) {
  14. appcontent.addEventListener("DOMContentLoaded", test.onload, true);
  15. }
  16. }, false);
Интуитивно понятная всем DOM -модель.. или вот код из моего плагина :


send_http : function(u,params,func){
var HttpMethod='POST';
var R=this.REQ;
if(R)
{
R.onreadystatechange=func;
R.open(HttpMethod,u,true);
R.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
R.send(params);
}else{
alert("I cant create browser");
}




},

get_http : function() {

if(window.XMLHttpRequest){

this.REQ=new XMLHttpRequest();
return this.REQ;
}else{
alert("sorry,change you browser please");
return null;
}





},
То есть всем хорошо знакомый старый JavaScript и написание диалогов при помощи XUL - подмножества XML. А вот что примерно мы увидим в IE с ее COM - моделью:

Тут происходит привязка к событию DISPID_DOCUMENTCOMPLETE, и в случае возникновения выполняем код:
  1. VARIANT vFlags = { 0 };
  2. VariantInit(&vFlags);
  3. vFlags.vt = VT_I4;
  4. vFlags.intVal |= navNoReadFromCache;
  5. BSTR testUrl = SysAllocString(L"javascript: код инъекции");
  6. mWebBrowser2->Navigate(testUrl, &vFlags, NULL, NULL, NULL);

Тут мы видим что-то абсолютно новое, непонятное и далекое от нас если мы незнакомы с документацией COM. Итог "без комментариев"

Комментариев нет: