Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] código que funciona en el shell pero no en greasemonkey

Estas en el tema de código que funciona en el shell pero no en greasemonkey en el foro de Javascript en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var allTitles , thisTitle ; allTitles = document. evaluate ( "//div[@id='simulacion_tabla']//a" , //busca todos los div con valor ...
  #1 (permalink)  
Antiguo 26/03/2017, 11:20
 
Fecha de Ingreso: enero-2016
Mensajes: 21
Antigüedad: 8 años, 10 meses
Puntos: 0
código que funciona en el shell pero no en greasemonkey

Código Javascript:
Ver original
  1. var allTitles, thisTitle;
  2. allTitles = document.evaluate(
  3. "//div[@id='simulacion_tabla']//a", //busca todos los div con valor simulacion_tabla y dentro de estos todos los anchor
  4. document, //esto parece que no se puede afinar más
  5. null,
  6. XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
  7. null);
  8.  
  9. //en allTitles tenemos todos los anchor de la tabla
  10.  
  11. document.getElementById('simulacion_tabla').insertAdjacentHTML("afterend", "<input type='button' id='botonBuscar' onClick='buscarGoogle()' value='BUSCAR' />");
  12.  
  13. for (var i = 0; i < allTitles.snapshotLength; i++) {
  14. thisTitle = allTitles.snapshotItem(i);
  15.     document.getElementById('simulacion_tabla').getElementsByClassName('col1')[i].insertAdjacentHTML("beforeend", "<input type='checkbox' id='checkbox"+i+"' />");
  16.    
  17. }
  18.  
  19. //esto agregó un checkbox a cada anchor de la tabla, poniéndoles ids correlativos
  20.  
  21. function buscarGoogle(){
  22.     for (var i = 0; i < allTitles.snapshotLength; i++){
  23.         var url=allTitles.snapshotItem(i).innerHTML;
  24.        
  25.         if(document.getElementById("checkbox"+i).checked){
  26.            
  27.             window.open('http://google.com/search?q='+ url, '_blank');
  28.         }
  29.     }
  30. }
Este código me funciona en el shell pero no cuando ya lo pongo en el greasemonkey... en realidad funciona sólo la mitad.
Sí agrega los checkbox en cada línea de la tabla pero luego al darle al botón no busca en google. O sea el botón no funciona..
Pero en el shell me funciona perfectamente...
Gracias
  #2 (permalink)  
Antiguo 28/03/2017, 05:28
 
Fecha de Ingreso: enero-2016
Mensajes: 21
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: código que funciona en el shell pero no en greasemonkey

http://stackoverflow.com/questions/17378199/uncaught-referenceerror-function-is-not-defined-with-onclick

ahí está principalmente la respuesta a mi problema, como no sé si puedo pegar ese link y como es en inglés haré un pequeño resumen:

Nunca uses onclick() en un userscript ya que funciona algo así como en un "mundo aislado" por lo que no puede ver las funciones que hay fuera.
En mi caso desde los botones no puede ver las funciones.
Es mejor usar addEventListener.
Aquí va el código que ahora sí funciona en greasemonkey:
Código Javascript:
Ver original
  1. var allTitles, thisTitle;
  2. allTitles = document.evaluate(
  3. "//div[@id='simulacion_tabla']//a", //busca todos los div con valor simulacion_tabla y dentro de estos todos los anchor
  4. document, //esto parece que no se puede afinar más
  5. null,
  6. XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
  7. null);
  8.  
  9. //en allTitles tenemos todos los anchor de la tabla
  10.  
  11. //agregamos un botón para buscar y otro para deseleccionar los checkbox
  12. document.getElementById('simulacion_tabla').insertAdjacentHTML("afterend", "<input type='button' id='botonBuscar' value='BUSCAR' />");
  13. document.getElementById("botonBuscar").addEventListener('click',buscarGoogle,false);
  14. document.getElementById('simulacion_tabla').insertAdjacentHTML("afterend", "<input type='button' id='botonDeseleccionar' value='BORRAR' />");
  15. document.getElementById("botonDeseleccionar").addEventListener('click',deseleccionarCheckbox,false);
  16.  
  17. for (var i = 0; i < allTitles.snapshotLength; i++) {
  18. thisTitle = allTitles.snapshotItem(i);
  19.     document.getElementById('simulacion_tabla').getElementsByClassName('col1')[i].insertAdjacentHTML("beforeend", "<input type='checkbox' id='checkbox"+i+"' />");
  20.    
  21. }
  22.  
  23. //esto agregó un checkbox a cada anchor de la tabla, poniéndoles ids correlativos
  24.  
  25. function buscarGoogle(){
  26.     for (var i = 0; i < allTitles.snapshotLength; i++){
  27.         var url=allTitles.snapshotItem(i).innerHTML;
  28.        
  29.         if(document.getElementById("checkbox"+i).checked){
  30.            
  31.             window.open('http://google.com/search?q='+ url, '_blank');
  32.         }
  33.     }
  34. }
  35.  
  36. function deseleccionarCheckbox(){
  37.     for (var i = 0; i < allTitles.snapshotLength; i++){
  38.         document.getElementById("checkbox"+i).checked=0;
  39.     }
  40.  
  41. }

Etiquetas: checkbox, shell, window.open
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:15.