Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You can listen for ajax calls, but that gets overly complicated, depending on the target pages. The most robust way to get ajax-ified content on a wild page is to poll for it, like so:</p> <pre><code>function myCode (jNode) { //YOUR CODE HERE var damageMessage = jNode.text(); //... } waitForKeyElements (".mw_error", myCode, false, "iframe"); function waitForKeyElements ( selectorTxt, /* Required: The jQuery selector string that specifies the desired element(s). */ actionFunction, /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */ bWaitOnce, /* Optional: If false, will continue to scan for new elements even after the first match is found. */ iframeSelector /* Optional: If set, identifies the iframe to search. */ ) { var targetNodes, btargetsFound; if (typeof iframeSelector == "undefined") targetNodes = $(selectorTxt); else targetNodes = $(iframeSelector).contents () .find (selectorTxt); if (targetNodes &amp;&amp; targetNodes.length &gt; 0) { /*--- Found target node(s). Go through each and act if they are new. */ targetNodes.each ( function () { var jThis = $(this); var alreadyFound = jThis.data ('alreadyFound') || false; if (!alreadyFound) { //--- Call the payload function. actionFunction (jThis); jThis.data ('alreadyFound', true); } } ); btargetsFound = true; } else { btargetsFound = false; } //--- Get the timer-control variable for this selector. var controlObj = waitForKeyElements.controlObj || {}; var controlKey = selectorTxt.replace (/[^\w]/g, "_"); var timeControl = controlObj [controlKey]; //--- Now set or clear the timer as appropriate. if (btargetsFound &amp;&amp; bWaitOnce &amp;&amp; timeControl) { //--- The only condition where we need to clear the timer. clearInterval (timeControl); delete controlObj [controlKey] } else { //--- Set a timer, if needed. if ( ! timeControl) { timeControl = setInterval ( function () { waitForKeyElements ( selectorTxt, actionFunction, bWaitOnce, iframeSelector ); }, 500 ); controlObj [controlKey] = timeControl; } } waitForKeyElements.controlObj = controlObj; } </code></pre> <hr> <hr> <p>Beware that Greasemonkey can also run on iFrames, so you may not need to do anything other than know if you're in an iFrame, depending upon the script's purpose.</p> <p>Conversely, you can get unexpected results if the GM script(s) fire on the iFrame URL when you haven't planned on it.</p> <p>For example, suppose you had this page at URL_A:</p> <pre><code>&lt;body&gt; &lt;iframe src="URL_B"&gt;&lt;/iframe&gt; &lt;/body&gt; </code></pre> <p>And the GM script's <code>// @include</code> directive(s) covered both urls (<code>// @include URL_*</code>, etc.).</p> <p>Then if the script just had <code>alert ('Script start.');</code>, you would see 2 alerts upon loading the page.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload