quantum habilitar gratis cómo como chrome celular activar javascript jquery firefox firefox-addon

habilitar - como activar javascript en mi celular



Cómo usar jQuery en la extensión de Firefox (7)

Creo que esto es lo que Eric estaba diciendo, pero puedes cargar Javascript desde la URL directamente.

javascript:var%20s=document.createElement(''script'');s.setAttribute(''src'',''http://YOURJAVASCRIPTFILE.js'');document.getElementsByTagName(''body'')[0].appendChild(s);void(s);

Supongo que quieres que tu extensión cargue JQuery para que puedas manipular fácilmente los elementos de la página. Los laboratorios de mi compañía tienen algo que hace esto usando Javascript directamente aquí: http://parkerfox.co.uk/labs/pixelperfect

Quiero usar jQuery dentro de una extensión de Firefox, importé la biblioteca en el archivo xul de esta manera:

<script type="application/x-javascript" src="chrome://myExtension/content/jquery.js"> </script>

pero la función $ () no se reconoce en el archivo xul ni tampoco jQuery ().

Busqué en Google el problema y encontré algunas soluciones, pero nadie trabajó conmigo: http://gluei.com/blog/view/using-jquery-inside-your-firefox-extension http://forums.mozillazine.org/viewtopic.php?f=19&t=989465

También he intentado pasar el objeto ''content.document'' (que refrences el objeto ''document'') como el parámetro de contexto para la función jQuery de esta manera:

$(''img'',content.document);

pero aún no funciona, ¿alguien se encontró con este problema antes?


En lugar de

$(''img'',content.document);

puedes probar

$(''img'',window.content.document);

En mi caso, funciona.



La siguiente solución posibilita el uso de jQuery en contentScriptFile (Targetting 1.5 Addon-sdk)

En tu main.js:

exports.main = function() { var pageMod = require("page-mod"); pageMod.PageMod({ include: "*", contentScriptWhen: ''end'', contentScriptFile: [data.url("jquery-1.7.1-min.js") , data.url("notifier.js") , data.url("message.js")], onAttach: function onAttach(worker) { //show the message worker.postMessage("Hello World"); } }); };

En tu message.js:

self.on("message", function(message){ if(message !== "undefined"){ Notifier.info(message); } });

Algunas dificultades que debes tener en cuenta:

  • El orden de la matriz contentScriptFile. si message.js se colocara primero: jQuery no se reconocerá.
  • No coloque un http: // url en el data.url (esto no funciona)!
  • Todos sus archivos javascript deben estar en la carpeta de datos. (Solo main.js debe estar en la carpeta lib)

Puede ser una mala práctica, pero ¿ha considerado incluirla en línea?


Resulta que la respuesta actual actual de @sunsean no funciona como se espera cuando se trata de manejar cargas múltiples . La función debe cerrarse correctamente sobre el documento y evitar el estado global.

Además, debe llamar a jQuery.noConflict(true) para evitar conflictos con otros complementos.

Esto es a quién le escribiría (otra vez, evitaría jquery (en complementos) como la peste ...). Primero, la superposición XUL

<?xml version="1.0"?> <overlay id="test-addon-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="text/javascript" src="jquery.js"/> <script type="text/javascript" src="overlay.js"/> </overlay>

Y luego el script de superposición:

// Use strict mode in particular to avoid implicitly var declarations (function() { "use strict"; // Main runner function for each content window. // Similar to SDK page-mod, but without the security boundaries. function run(window, document) { // jquery setup. per https://.com/a/496970/484441 $ = function(selector,context) { return new jq.fn.init(selector,context || document); }; $.fn = $.prototype = jq.fn; if (document.getElementById("my-example-addon-container")) { return; } let main = $(''<div id="my-example-addon-container">''); main.appendTo(document.body).text(''Example Loaded!''); main.click(function() { //<--- added this function main.text(document.location.href); }); main.css({ background:''#FFF'',color:''#000'',position:''absolute'',top:0,left:0,padding:8 }); }; const log = Components.utils.reportError.bind(Components.utils); // Do not conflict with other add-ons using jquery. const jq = jQuery.noConflict(true); gBrowser.addEventListener("DOMContentLoaded", function load(evt) { try { // Call run with this == window ;) let doc = evt.target.ownerDocument || evt.target; if (!doc.location.href.startsWith("http")) { // Do not even attempt to interact with non-http(s)? sites. return; } run.call(doc.defaultView, doc.defaultView, doc); } catch (ex) { log(ex); } }, true); })();

Aquí hay un add-on completo como esencia . Solo inserte una copia de jquery y debería ser bueno ir.


Yo uso el siguiente example.xul :

<?xml version="1.0"?> <overlay id="example" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <head></head> <script type="application/x-javascript" src="jquery.js"></script> <script type="application/x-javascript" src="example.js"></script> </overlay>

Y aquí hay un example.js

(function() { jQuery.noConflict(); $ = function(selector,context) { return new jQuery.fn.init(selector,context||example.doc); }; $.fn = $.prototype = jQuery.fn; example = new function(){}; example.log = function() { Firebug.Console.logFormatted(arguments,null,"log"); }; example.run = function(doc,aEvent) { // Check for website if (!doc.location.href.match(/^http:////(.*/.)?/.com(//.*)?$/i)) return; // Check if already loaded if (doc.getElementById("plugin-example")) return; // Setup this.win = aEvent.target.defaultView.wrappedJSObject; this.doc = doc; // Hello World this.main = main = $(''<div id="plugin-example">'').appendTo(doc.body).html(''Example Loaded!''); main.css({ background:''#FFF'',color:''#000'',position:''absolute'',top:0,left:0,padding:8 }); main.html(main.html() + '' - jQuery <b>'' + $.fn.jquery + ''</b>''); }; // Bind Plugin var delay = function(aEvent) { var doc = aEvent.originalTarget; setTimeout(function() { example.run(doc,aEvent); }, 1); }; var load = function() { gBrowser.addEventListener("DOMContentLoaded", delay, true); }; window.addEventListener("pageshow", load, false); })();