[Project_owners] evaluate html document by XMLHttpRequest

Foreningen Selvet - Jesper Staun Hansen jesper at selvet.dk
Fri Aug 10 12:25:26 PDT 2007


Tried this without any result:
var iframe = document.createElement("IFRAME");
iframe.style.visibility = "hidden";
iframe.style.position = "absolute";
document.body.appendChild(iframe);
iframe.docShell.allowJavascript = false;
iframe.docShell.allowAuth = false;
iframe.docShell.allowPlugins = false;
iframe.docShell.allowMetaRedirects = false;
iframe.docShell.allowSubframes = false;
iframe.docShell.allowImages = false;

With the error:
Error: iframe.docShell has no properties

Any hints?


Foreningen Selvet - Jesper Staun Hansen wrote:
> Cant seem to find documentation on that?
>
> eric.jung at yahoo.com wrote:
>   
>> Take a look at how Myk did it with microsummaries:
>> http://mxr.mozilla.org/seamonkey/source/browser/components/microsummaries/src/nsMicrosummaryService.js#2089
>> XHR isn't used, but the iframe trick is used with lots of subtleties; 
>> e.g. turning off javascript and images in the iframe (to reduce 
>> network traffic), preventing about:blank from loading in the iframe, etc.
>>
>> ----- Original Message ----
>> From: Foreningen Selvet - Jesper Staun Hansen <jesper at selvet.dk>
>> To: Mozdev Project Owners List <project_owners at mozdev.org>
>> Sent: Friday, August 10, 2007 1:56:28 PM
>> Subject: Re: [Project_owners] evaluate html document by XMLHttpRequest
>>
>> Discard from this question.
>> I found the solution! Yay!
>>
>> Foreningen Selvet - Jesper Staun Hansen wrote:
>>     
>>> I am getting really impatient about this problem as I cant seem to 
>>>       
>> solve
>>     
>>> it :O!
>>> Does anyone have a complete script I can look at using Greasymonkeys
>>> version of the XMLHttpRequest downloader "and put it in a iframe and
>>> evaluate it" script.
>>>
>>> I'm running out of ideas here.
>>>
>>>
>>> Greets.
>>>
>>> Tommi Rautava wrote:
>>>  
>>>       
>>>> The DOMContentLoaded event is sent after close(), so it should be
>>>> enough if the listener is added just before
>>>> iframe.contentDocument.close().
>>>>
>>>> 2007/8/8, eric.jung at yahoo.com <eric.jung at yahoo.com>:
>>>>  
>>>>    
>>>>         
>>>>> Interesting. The only comment I'll make is you should add
>>>>> iframe.contentDocument.addEventListener() *before* writing
>>>>> the responseText into the IFRAME otherwise, under race conditions, 
>>>>>           
>> I could
>>     
>>>>> see you missing the DOMContentLoaded event.
>>>>>
>>>>>
>>>>>
>>>>> ----- Original Message ----
>>>>> From: Foreningen Selvet - Jesper Staun Hansen <jesper at selvet.dk>
>>>>> To: Mozdev Project Owners List <project_owners at mozdev.org>
>>>>> Sent: Wednesday, August 8, 2007 7:21:47 AM
>>>>> Subject: Re: [Project_owners] evaluate html document by XMLHttpRequest
>>>>>
>>>>> So, the trick here would be to throw all of the code into iframe and
>>>>> define it as text/html and then parse it?
>>>>> Guess I think I got it right.
>>>>>
>>>>>
>>>>> Tommi Rautava wrote:
>>>>>    
>>>>>      
>>>>>           
>>>>>> The problem is that you cannot parse HTML with XML parser. I 
>>>>>>             
>> struggled
>>     
>>>>>> with the same problem some time ago and the best solution I have 
>>>>>>             
>> found
>>     
>>>>>> so far is the HTML parser example made by Aaron Boodman (the original
>>>>>> author of Greasemonkey):
>>>>>> http://youngpup.net/userscripts/htmlparserexample.user.js
>>>>>>
>>>>>> br, Tom
>>>>>>
>>>>>> 2007/8/7, Foreningen Selvet - Jesper Staun Hansen <jesper at selvet.dk>:
>>>>>>
>>>>>>      
>>>>>>        
>>>>>>             
>>>>>>> Hello.
>>>>>>>
>>>>>>>
>>>>>>> I am having some trouble using element.evaluate(properties) with
>>>>>>> documents fetched with XMLHttpRequest, so I am looking for a 
>>>>>>>               
>> method to
>>     
>>>>>>> do the same as this:
>>>>>>>
>>>>>>> //*****
>>>>>>> var roundinfo = {
>>>>>>>     runde : "56",
>>>>>>>     heroesid : null,
>>>>>>>     heroesnick : null
>>>>>>> }
>>>>>>>
>>>>>>>         var path = '//table/tbody/tr/td';
>>>>>>>         var obj = document.evaluate(path,document,null,
>>>>>>>             XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> null);
>>>>>    
>>>>>      
>>>>>           
>>>>>>>         for (var k = 0; k < obj.snapshotLength; k++) {
>>>>>>>             obj2 = obj.snapshotItem(k).parentNode;
>>>>>>>             var nodes = obj2.childNodes;
>>>>>>>
>>>>>>>             dump("Found keys: "+nodes.length+"\n");
>>>>>>>             var menu =
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> nodes[0].textContent.trim().split("#");
>>>>>    
>>>>>      
>>>>>           
>>>>>>>             roundinfo.heroesnick = menu[0].trim();
>>>>>>>             roundinfo.heroesid = menu[1].trim();
>>>>>>>             dump("Nick is: "+roundinfo.heroesnick+"\n");
>>>>>>>             dump("ID is: "+roundinfo.heroesid+"\n\n");
>>>>>>>         }
>>>>>>> //*****
>>>>>>>
>>>>>>> And the document contains this:
>>>>>>>
>>>>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
>>>>>>> <html>
>>>>>>> <head>
>>>>>>> <title></title>
>>>>>>> </head>
>>>>>>> <body>
>>>>>>> <table>
>>>>>>>         <tr>
>>>>>>>                 <td colspan="3"><font face="arial" size="1"
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> color="DarkTurquoise">Axe Decapitators       #130303</font></td>
>>>>>    
>>>>>      
>>>>>           
>>>>>>>         </tr>
>>>>>>>
>>>>>>>
>>>>>>> </table>
>>>>>>> </body>
>>>>>>> </html>
>>>>>>>
>>>>>>> And the dump would be
>>>>>>>
>>>>>>> Nick is: Axe Decapitators
>>>>>>> ID is: 130303
>>>>>>>
>>>>>>> And I tried some things to make it with XMLHttpRequest:
>>>>>>> //******* Attemp:
>>>>>>>             var req = new XMLHttpRequest();
>>>>>>>             req.overrideMimeType('text/html');
>>>>>>>             req.open('GET',
>>>>>>> 'http://www.URL_TO_FETCH_CONTAINING_THE_ABOVE_CODE.dk',
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> true);
>>>>>    
>>>>>      
>>>>>           
>>>>>>>             req.onreadystatechange = function () {
>>>>>>>               if (req.readyState == 4) {
>>>>>>>                  if(req.status != 404) {
>>>>>>>                 var path = '//table/tbody/tr/td/font';
>>>>>>>                 var domParser = new DOMParser();
>>>>>>>                 var dom = 
>>>>>>>               
>> domParser.parseFromString(req.responseText,
>>     
>>>>>>> "text/xml").documentElement;
>>>>>>>
>>>>>>>                 var obj =
>>>>>>>
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> dom.evaluate(path,dom,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
>>>>> null);
>>>>>    
>>>>>      
>>>>>           
>>>>>>>                 for (var k = 0; k < obj.snapshotLength; k++) {
>>>>>>>                     obj2 = obj.snapshotItem(k).parentNode;
>>>>>>>                     var nodes = obj2.childNodes;
>>>>>>>
>>>>>>>                     dump("Found keys: "+nodes.length+"\n");
>>>>>>>                     var menu =
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> nodes[0].textContent.trim().split("#");
>>>>>    
>>>>>      
>>>>>           
>>>>>>>                     roundinfo.heroesnick = menu[0].trim();
>>>>>>>                     roundinfo.heroesid = menu[1].trim();
>>>>>>>                     dump("Nick is: "+roundinfo.heroesnick+"\n");
>>>>>>>                     dump("ID is: "+roundinfo.heroesid+"\n\n");
>>>>>>>                 }
>>>>>>>                  }
>>>>>>>                  else
>>>>>>>                   dump("Error loading page with status"+ reg.status
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>> +"\n");
>>>>>    
>>>>>      
>>>>>           
>>>>>>>               }
>>>>>>>             };
>>>>>>>             req.send(null);
>>>>>>>
>>>>>>>
>>>>>>> But this only results in this:
>>>>>>> Error: syntax error
>>>>>>> Source File: chrome://browser/content/browser.xul
>>>>>>> Line: 1, Column: 62
>>>>>>> Source Code:
>>>>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
>>>>>>>
>>>>>>>        
>>>>>>>          
>>>>>>>               
>> Transitional//EN">-------------------------------------------------------------^
>>     
>>>>>    
>>>>>      
>>>>>           
>>>>>>> Any tips on how to do this "right"?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> My regards.
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Project_owners mailing list
>>>>>>> Project_owners at mozdev.org
>>>>>>> http://mozdev.org/mailman/listinfo/project_owners
>>>>>>>
>>>>>>>
>>>>>>>        
>>>>>>>          
>>>>>>>               
>>>>>> _______________________________________________
>>>>>> Project_owners mailing list
>>>>>> Project_owners at mozdev.org
>>>>>> http://mozdev.org/mailman/listinfo/project_owners
>>>>>>
>>>>>>
>>>>>>
>>>>>>      
>>>>>>        
>>>>>>             
>>>>> _______________________________________________
>>>>> Project_owners mailing list
>>>>> Project_owners at mozdev.org
>>>>> http://mozdev.org/mailman/listinfo/project_owners
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Project_owners mailing list
>>>>> Project_owners at mozdev.org
>>>>> http://mozdev.org/mailman/listinfo/project_owners
>>>>>
>>>>>
>>>>>    
>>>>>      
>>>>>           
>>>> _______________________________________________
>>>> Project_owners mailing list
>>>> Project_owners at mozdev.org
>>>> http://mozdev.org/mailman/listinfo/project_owners
>>>>
>>>>
>>>>  
>>>>    
>>>>         
>>> _______________________________________________
>>> Project_owners mailing list
>>> Project_owners at mozdev.org
>>> http://mozdev.org/mailman/listinfo/project_owners
>>>
>>>
>>>  
>>>       
>> _______________________________________________
>> Project_owners mailing list
>> Project_owners at mozdev.org
>> http://mozdev.org/mailman/listinfo/project_owners
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Project_owners mailing list
>> Project_owners at mozdev.org
>> http://mozdev.org/mailman/listinfo/project_owners
>>   
>>     
>
>
> _______________________________________________
> Project_owners mailing list
> Project_owners at mozdev.org
> http://mozdev.org/mailman/listinfo/project_owners
>
>
>   




More information about the Project_owners mailing list