<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to XPCNativeWrapper</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>Recent changes to XPCNativeWrapper</description><atom:link href="https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/feed" rel="self"/><language>en</language><lastBuildDate>Fri, 09 Aug 2019 19:34:01 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/feed" rel="self" type="application/rss+xml"/><item><title>XPCNativeWrapper modified by mmartz</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -1,5 +1,5 @@
 [toTop]: #content_base "Top"
-[toBottom]: #site-footer "Bottom"
+[toBottom]: #notes "Bottom"

 ## Overview

@@ -155,3 +155,7 @@
 ~~~~~~    

 Any Greasemonkey script written before version 0.5 was released in mid-2005 may need updating to use [addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener). 
+
+## Notes
+
+[⬆][toTop]
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mmartz</dc:creator><pubDate>Fri, 09 Aug 2019 19:34:01 -0000</pubDate><guid>https://sourceforge.net1bd15c483e1b8d9af133a242a225421e584b9fe0</guid></item><item><title>XPCNativeWrapper modified by Martz</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -39,8 +39,8 @@
 Bad sample:

 ~~~~~~
-    var el = document.createElement("a");
-    el.onclick = "alert('Error'); return false;";
+var el = document.createElement('a');
+el.onclick = 'alert("Error"); return false;';
 ~~~~~~

 Instead, use [setAttribute](https://developer.mozilla.org/docs/Web/API/element.setAttribute) and [addEventListener](https://developer.mozilla.org/docs/Web/API/EventTarget.addEventListener) methods. Note the use of the [preventDefault](https://developer.mozilla.org/docs/Web/API/event.preventDefault) method to emulate the "return false" behavior above. 
@@ -86,7 +86,7 @@
 Instead use this... 

 ~~~~~~
-var arInputs = document.getElementsByTagName("input");
+var arInputs = document.getElementsByTagName('input');

 var elmInput;
 for (var i = arInputs.length - 1; i &amp;gt;= 0; --i) {
@@ -113,7 +113,7 @@
 Instead use this... 

 ~~~~~~
-form.elements.namedItem("foo");
+form.elements.namedItem('foo');
 ~~~~~~    

 The same goes for frames: 
@@ -127,7 +127,7 @@
 Instead use this... 

 ~~~~~~    
-window.frames["framename"];
+window.frames['framename'];
 ~~~~~~    

@@ -144,14 +144,14 @@
 or 

 ~~~~~~
-    element.onclick = "myClickHandler(this)";
+    element.onclick = 'myClickHandler(this)';
 ~~~~~~

 This does not work on XPCNativeWrappers; it will result in a `Component not available` error in the JavaScript console. Instead, use `addEventListener`

 ~~~~~~
-    element.addEventListener("click", myClickHandler, false);
+    element.addEventListener('click', myClickHandler, false);
 ~~~~~~    

 Any Greasemonkey script written before version 0.5 was released in mid-2005 may need updating to use [addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener). 
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Martz</dc:creator><pubDate>Sun, 10 Aug 2014 07:41:48 -0000</pubDate><guid>https://sourceforge.net95ae7984c73f52baddad9fff7fec715cdb426654</guid></item><item><title>XPCNativeWrapper modified by Martz</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -119,6 +119,7 @@
 The same goes for frames:

 Bad sample
+
 ~~~~~~
 window.framename;
 ~~~~~~
@@ -135,9 +136,11 @@
 Normal JavaScript can access an element's event handlers with code like: 

 Bad samples:
+
 ~~~~~~
 element.onclick = myClickHandler;
 ~~~~~~
+
 or 

 ~~~~~~
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Martz</dc:creator><pubDate>Sun, 10 Aug 2014 07:38:21 -0000</pubDate><guid>https://sourceforge.net8ecc4da11bfa2ee6ecffb0e3b33d5197db19e31d</guid></item><item><title>XPCNativeWrapper modified by Martz</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -96,96 +96,59 @@
 }
 ~~~~~~

-or 
-
-~~~~~~
-var arInputs = document.getElementsByTagName("input");
-
-for each(var elmInput in arInputs) {
-  /* some code */
-}
-~~~~~~
-
 ### Named Items

 Items like frames, form elements, and so on can be referenced by name in normal JavaScript. 

-XPCNativeWrappers cannot reference items by name. Use the 
-    
-    namedItem
+XPCNativeWrappers cannot reference items by name. Use the `namedItem` method.

-method. With a 
-    
-    &amp;lt;input name="foo"&amp;gt;
+With a `&lt;input name="foo" /&gt;` in the form:

-in the form: {{Bad samp |1=
-    
-    form.foo;
+Bad sample:

-}} 
+~~~~~~
+form.foo;
+~~~~~~

 Instead use this... 

-{{Good samp |1=
-    
-    
-    form.elements.namedItem("foo");
-    
-
-}} 
+~~~~~~
+form.elements.namedItem("foo");
+~~~~~~    

 The same goes for frames: 

-{{Bad samp |1=
-    
-    window.framename;
-
-}} 
+Bad sample
+~~~~~~
+window.framename;
+~~~~~~

 Instead use this... 

-{{Good samp |1=
-    
-    
-    window.frames["framename"];
-    
+~~~~~~    
+window.frames["framename"];
+~~~~~~    

-}}} 
-
-[X](Category:Security) [Category:Scripting_context] 

 ### Event Handlers

 Normal JavaScript can access an element's event handlers with code like: 

-{{Bad samp |1=
-    
-    element.onclick = myClickHandler;
-
-}} 
-
+Bad samples:
+~~~~~~
+element.onclick = myClickHandler;
+~~~~~~
 or 

-{{Bad samp |1=
-    
+~~~~~~
     element.onclick = "myClickHandler(this)";
+~~~~~~

-}} This does not work on XPCNativeWrappers; it will result in a 
-    
-    Component not available

-error in the JavaScript console. Instead, use 
-    
-    addEventListener
+This does not work on XPCNativeWrappers; it will result in a `Component not available` error in the JavaScript console. Instead, use `addEventListener`

-: {{Good samp |1=
-    
-    
+~~~~~~
     element.addEventListener("click", myClickHandler, false);
-    
+~~~~~~    

-}} 
-
-Any Greasemonkey script written before version 0.5 was released in mid-2005 may need updating to use addEventListener. 
-
-  * [https://developer.mozilla.org/En/DOM/Element.addEventListener](http://developer.mozilla.org/En/DOM/Element.addEventListener)
+Any Greasemonkey script written before version 0.5 was released in mid-2005 may need updating to use [addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener). 
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Martz</dc:creator><pubDate>Sun, 10 Aug 2014 07:36:42 -0000</pubDate><guid>https://sourceforge.net0ac8a62e477167ef8fe3e216155b274656c759cf</guid></item><item><title>XPCNativeWrapper modified by Martz</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,29 +1,34 @@
-[TOC]
+[toTop]: #content_base "Top"
+[toBottom]: #site-footer "Bottom"

 ## Overview

 Most all objects on a target web page that a user script sees are wrapped in [XPCNativeWrapper](http://developer.mozilla.org/en/docs/XPCNativeWrapper). The reason for this is so that a script can change the properties of an object (actually the wrapper) without any JavaScript on the target page being able to see it. Mostly the wrapping is "transparent" - wrapped and unwrapped objects seem to behave the same because the wrapping object passes methods to the wrapped object, though there are some some exceptions. 

+[⬆][toTop] [⬇][toBottom]
+
 #### wrappedJSObject

 For a script to access the real underlying object there is the method 

-{{Fair samp |why=Potential danger if a constructor init is called |1=
-    
-    
-    var realObj = wrappedObj.wrappedJSObject;
-    
+Fair sample:

-}} 
+~~~~~~
+var realObj = wrappedObj.wrappedJSObject;
+~~~~~~

-**Be very careful when using the wrappedJSObject property. It is just as dangerous as [UnsafeWindow] is.**
+**Be very careful when using the wrappedJSObject property. It is just as dangerous as [unsafeWindow](unsafeWindow) is.**
+
+[⬆][toTop] [⬇][toBottom]

 #### Security

-Related to [Security]. 
+Related to [security](Security). 

   * http://kb.mozillazine.org/XPCNativeWrapper 
-  * http://developer.mozilla.org/en/docs/XPCNativeWrapper 
+  * https://developer.mozilla.org/docs/Xray_vision
+
+[⬆][toTop] [⬇][toBottom]

 ## Limitations / Problems

@@ -31,102 +36,75 @@

 [Expando_Properties] do not work on XPCNativeWrappers. This means that, for example, this will not work: 

-{{Bad samp |1=
-    
+Bad sample:
+
+~~~~~~
     var el = document.createElement("a");
     el.onclick = "alert('Error'); return false;";
-    
+~~~~~~

-}} 
-
-Instead, use [setAttribute](Mdc:DOM:element.setAttribute) and [addEventListener](Mdc:DOM:element.addEventListener) methods. Note the use of the [preventDefault](Mdc:DOM:event.preventDefault) method to emulate the "return false" behavior above. 
+Instead, use [setAttribute](https://developer.mozilla.org/docs/Web/API/element.setAttribute) and [addEventListener](https://developer.mozilla.org/docs/Web/API/EventTarget.addEventListener) methods. Note the use of the [preventDefault](https://developer.mozilla.org/docs/Web/API/event.preventDefault) method to emulate the "return false" behavior above. 

 addEventListener example: 

-{{Good samp |1=
+

+~~~~~~
+function showTheError(event) {
+  event.preventDefault();

-    function showTheError(event) {
-        event.preventDefault();
-    
-        /* some code */
-    }
-    var el = document.createElement("a");
-    el.addEventListener("click", showTheError, false);
-    
+  /* some code */
+}

-}} 
+var el = document.createElement('a');
+el.addEventListener('click', showTheError, false);
+~~~~~~

 setAttribute example: 

-{{Good samp |1=
-    
-    
-    var el = document.createElement("a");
-    el.setAttribute("onclick", "alert('Error'); return false;");
-    
+~~~~~~
+var el = document.createElement('a');
+el.setAttribute('onclick', 'alert("Error"); return false;');
+~~~~~~

-}} This applies to any element, not just new ones you create (those references from 
-    
-    createElement
-
-and those from 
-    
-    getElementById
-
-et al), and any event handler, not just onclick. 
+ This applies to any element, not just new ones you create (those references from `createElement` and those from `getElementById`, and any event handler, not just onclick. 

 ### for ... in on HTMLCollections

-DOM methods like 
+DOM methods like `getElementsByTagName` return `HTMLCollection`s.
+
+Bad sample:
+
+~~~~~~
+var arInputs = document.getElementsByTagName('input');

-    getElementsByTagName
-
-return 
-    
-    HTMLCollection
-
-s. {{Bad samp |1=
-    
-    var arInputs = document.getElementsByTagName("input");
-    
-    for (var elmInput in arInputs) {
-    
-      /* some code */
-    }
-
-}} 
+for (var elmInput in arInputs) {
+  /* some code */
+}
+~~~~~~

 Instead use this... 

-{{Good samp |1=
+~~~~~~
+var arInputs = document.getElementsByTagName("input");
+
+var elmInput;
+for (var i = arInputs.length - 1; i &amp;gt;= 0; --i) {
+  elmInput = arInputs[i];

-    
-    var arInputs = document.getElementsByTagName("input");
-    
-    var elmInput;
-    for (var i = arInputs.length - 1; i &amp;gt;= 0; --i) {
-      elmInput = arInputs[i];
-    
-      /* some code */
-    }
-    
-
-}} 
+  /* some code */
+}
+~~~~~~

 or 

-{{Good samp |1=
-    
-    
-    var arInputs = document.getElementsByTagName("input");
-    
-    for each(var elmInput in arInputs) {
-      /* some code */
-    }
-    
+~~~~~~
+var arInputs = document.getElementsByTagName("input");

-}} 
+for each(var elmInput in arInputs) {
+  /* some code */
+}
+~~~~~~

 ### Named Items

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Martz</dc:creator><pubDate>Sun, 10 Aug 2014 07:31:09 -0000</pubDate><guid>https://sourceforge.net0eefa8744b2b97f050fda4cc92998f11c47361c4</guid></item><item><title>XPCNativeWrapper modified by Martz</title><link>https://sourceforge.net/p/greasemonkey/wiki/XPCNativeWrapper/</link><description>&lt;div class="markdown_content"&gt;&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#overview"&gt;Overview&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#wrappedjsobject"&gt;wrappedJSObject&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#security"&gt;Security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#limitations-problems"&gt;Limitations / Problems&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#expando-properties"&gt;Expando Properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#for-in-on-htmlcollections"&gt;for ... in on HTMLCollections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#named-items"&gt;Named Items&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#event-handlers"&gt;Event Handlers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Most all objects on a target web page that a user script sees are wrapped in &lt;a class="" href="http://developer.mozilla.org/en/docs/XPCNativeWrapper" rel="nofollow"&gt;XPCNativeWrapper&lt;/a&gt;. The reason for this is so that a script can change the properties of an object (actually the wrapper) without any JavaScript on the target page being able to see it. Mostly the wrapping is "transparent" - wrapped and unwrapped objects seem to behave the same because the wrapping object passes methods to the wrapped object, though there are some some exceptions. &lt;/p&gt;
&lt;h4 id="wrappedjsobject"&gt;wrappedJSObject&lt;/h4&gt;
&lt;p&gt;For a script to access the real underlying object there is the method &lt;/p&gt;
&lt;p&gt;{{Fair samp |why=Potential danger if a constructor init is called |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;realObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wrappedObj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wrappedJSObject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be very careful when using the wrappedJSObject property. It is just as dangerous as &lt;span&gt;&lt;span&gt;[UnsafeWindow]&lt;/span&gt;&lt;/span&gt; is.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="security"&gt;Security&lt;/h4&gt;
&lt;p&gt;Related to &lt;span&gt;[Security]&lt;/span&gt;. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://kb.mozillazine.org/XPCNativeWrapper" rel="nofollow"&gt;http://kb.mozillazine.org/XPCNativeWrapper&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.mozilla.org/en/docs/XPCNativeWrapper" rel="nofollow"&gt;http://developer.mozilla.org/en/docs/XPCNativeWrapper&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="limitations-problems"&gt;Limitations / Problems&lt;/h2&gt;
&lt;h3 id="expando-properties"&gt;Expando Properties&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;[Expando_Properties]&lt;/span&gt; do not work on XPCNativeWrappers. This means that, for example, this will not work: &lt;/p&gt;
&lt;p&gt;{{Bad samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;alert('Error'); return false;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;Instead, use &lt;a class="" href="../"&gt;setAttribute&lt;/a&gt; and &lt;a class="" href="../"&gt;addEventListener&lt;/a&gt; methods. Note the use of the &lt;a class="" href="../"&gt;preventDefault&lt;/a&gt; method to emulate the "return false" behavior above. &lt;/p&gt;
&lt;p&gt;addEventListener example: &lt;/p&gt;
&lt;p&gt;{{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;showTheError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="cm"&gt;/* some code */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;click&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;showTheError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;setAttribute example: &lt;/p&gt;
&lt;p&gt;{{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;onclick&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;alert('Error'); return false;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} This applies to any element, not just new ones you create (those references from &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;createElement&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and those from &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;getElementById&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et al), and any event handler, not just onclick. &lt;/p&gt;
&lt;h3 id="for-in-on-htmlcollections"&gt;for ... in on HTMLCollections&lt;/h3&gt;
&lt;p&gt;DOM methods like &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;getElementsByTagName&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;return &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;HTMLCollection&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;s. {{Bad samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;elmInput&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="cm"&gt;/* some code */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;Instead use this... &lt;/p&gt;
&lt;p&gt;{{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;elmInput&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;elmInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="cm"&gt;/* some code */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;p&gt;{{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nf"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;elmInput&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;arInputs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/* some code */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;h3 id="named-items"&gt;Named Items&lt;/h3&gt;
&lt;p&gt;Items like frames, form elements, and so on can be referenced by name in normal JavaScript. &lt;/p&gt;
&lt;p&gt;XPCNativeWrappers cannot reference items by name. Use the &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;namedItem&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;method. With a &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;in the form: {{Bad samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;Instead use this... &lt;/p&gt;
&lt;p&gt;{{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;namedItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;The same goes for frames: &lt;/p&gt;
&lt;p&gt;{{Bad samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;framename&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;Instead use this... &lt;/p&gt;
&lt;p&gt;{{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frames&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;framename&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}}} &lt;/p&gt;
&lt;p&gt;&lt;a class="" href="../"&gt;X&lt;/a&gt; &lt;span&gt;[Category:Scripting_context]&lt;/span&gt; &lt;/p&gt;
&lt;h3 id="event-handlers"&gt;Event Handlers&lt;/h3&gt;
&lt;p&gt;Normal JavaScript can access an element's event handlers with code like: &lt;/p&gt;
&lt;p&gt;{{Bad samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myClickHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;p&gt;{{Bad samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;myClickHandler(this)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} This does not work on XPCNativeWrappers; it will result in a &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Component&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;error in the JavaScript console. Instead, use &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;addEventListener&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;: {{Good samp |1=&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;click&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;myClickHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}} &lt;/p&gt;
&lt;p&gt;Any Greasemonkey script written before version 0.5 was released in mid-2005 may need updating to use addEventListener. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="" href="http://developer.mozilla.org/En/DOM/Element.addEventListener" rel="nofollow"&gt;https://developer.mozilla.org/En/DOM/Element.addEventListener&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Martz</dc:creator><pubDate>Fri, 27 Jun 2014 23:40:50 -0000</pubDate><guid>https://sourceforge.neta5ce5b5a94383296ea6daae57ed5723bfd302fa0</guid></item></channel></rss>