Tengo la siguiente etiqueta de anclaje, que contiene argumentos generados dinámicamente arg1,...,arg5
a la función de JavaScript foo()
, que se ejecuta en el lado del sitio web. Hay varias de estas etiquetas de anclaje a través de la página en cuestión, con la única id
valores y argN
valores:Greasemonkey, Chrome y unsafeWindow.foo()
<a href="#" id="foo1234567890" onclick="javascript:foo(arg1,arg2,arg3,arg4,arg5);return false;" target="_self" title="foobarbaz"> blah </a>
me gustaría disparar mediante programación la función foo()
por bucle a través de todos los éxitos para este elemento, en busca de los argumentos y pasando esos argumentos a la llamada de unsafeWindow.function(args)
de Greasemonkey.
Aquí está el script de Greasemonkey que he escrito hasta ahora:
function removeAllProperties() {
var xpath = "//A[@title='foobarbaz']";
var actionNodes = document.evaluate(
xpath,
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
var total = actionNodes.snapshotLength;
for (var i=0; i < total; i++) {
var candidate = actionNodes.snapshotItem(i);
//alert(candidate.nodeName);
if (candidate.nodeName === "A") {
var onclick_value = candidate.getAttribute('onclick');
var needle = /javascript:foo\((.*)\);return false\;/;
onclick_value.match(needle);
//alert(onclick_value);
//alert(RegExp.$1);
var script_args = RegExp.$1;
if (confirm(script_args)) {
unsafeWindow.foo(script_args);
}
}
}
}
removeAllProperties();
Cuando instalo este script y ejecutarlo, me da la alerta con los argumentos arg1,...,arg5
. Si hago clic en OK, me sale el siguiente error en Google Chrome 5.0.375.125 para OS X: la página
Uncaught TypeError: Object [object DOMWindow] has no method 'foo'
La web en cuestión definitivamente tiene foo()
- si hago clic en blah
entonces el evento onclick
desencadena foo()
. Simplemente no puedo hacerlo funcionar a través de este script de Greasemonkey.
estoy usando unsafeWindow.function(args)
incorrectamente o qué Google Chrome no admite este método de activación de funciones de JavaScript remotas?
¿Hay una manera diferente que debería utilizar esta función, o debería utilizar otro método completamente?
Gracias por su consejo.
Saludos , ¡muy apreciado! –