2009-10-29 6 views
3

Hier j'ai découvert Bookmarklets et je suis totalement amoureux. J'ai écrit plusieurs pour réduire le nombre de clics pour quelques tâches courantes sur mes sites Web préférés. Ce que je voudrais faire maintenant, si possible, est de combiner les actions de deux de ces bookmarklets en un seul script/lien. La configuration actuelle est la suivante: Bookmarklet 1 (B1) effectue une action (sur l'URL 1) qui charge une page (URL 2) où Bookmarklet 2 (B2) entre ensuite un ensemble de données standard dans un formulaire et le soumet.Combinaison de deux bookmarklets

J'ai essayé toutes sortes de variations des éléments suivants:

javascript: (function() {w = window.open (codeFromB1, 'CatchyPageTitle'); w.TryToWriteSomethingToTheTheNewWindowToPassAndCallFunctionB2;)}();

Mais toutes mes tentatives de w.TryToWriteSomethingToTheTheWindow donnent des erreurs de différents types. Ma tentative la plus récente consistait à utiliser quelque chose comme:

alert (w.document.getElementsByTagName ("form"). Length); ce qui donne le compte de la page d'appel sur la première fois appelé, mais le compte de la nouvelle fenêtre sur la deuxième fois appelé ...

Donc de toute façon, c'est mon histoire pour aujourd'hui. En résumé, je suis une âme perdue qui a besoin d'être guidée. J'ai deux actions de script qui se déroulent sur deux pages différentes que je voudrais combiner dans un extrait de code qui peut être enregistré en tant que Bookmarklet. J'ai besoin de quelqu'un pour me diriger dans la bonne direction afin que je puisse comprendre comment 'relier' les deux pages/scripts afin de créer un Bookmarklet spectaculaire.

Merci d'avance pour toute aide.


Aussi, j'ai données fictives Array() que je me sers pour terminer le reste du script et a trouvé une question pour ceux qui sont plus intelligents que moi aussi partie B2 lit:

wdoc.forms [0] .t5.value = #; Où t5 est le nom de l'entrée/du texte dans le formulaire

Pourquoi cela fonctionne-t-il mais:

thisInput = 't'.concat (i); // où i = 5 dans la boucle for wdoc.forms [0] .thisInput.value = #;

me donne une erreur - "thisInput" est indéfini. J'ai également essayé de créer un tableau avec les noms d'entrée/texte comme:

document.forms [0] .thisInput [i] .value = #;

mais cela donne la même erreur. Aucune suggestion?

+1

+1 pour être "totalement amoureux" d'un bookmarklet ... – Pool

Répondre

1

L'URL 1 d'un domaine (ou d'un sous-domaine) différent de l'URL 2? Si oui, vous rencontrerez un problème inter-domaine. Vous pouvez le résoudre en utilisant HTML5 cross-window messaging, au moins pour les navigateurs qui le supportent.

Vous pourriez également être intéressé par Greasemonkey si vous êtes prêt à être spécifique à Firefox et que vous exigez que quiconque utilise l'extension Greasemonkey soit installé. Je l'ai utilisé pour écrire facilement des bookmarklets de plusieurs pages qui passent par des formulaires compliqués, ou qui collectent des données à partir de plusieurs pages de recherche. Au début du script, vous choisissez simplement ce qu'il faut faire en fonction de document.location.href. Vous pouvez également exploiter the window.name hack pour partager des informations entre les pages.

+0

URL1 et URL2 sont tous les deux sur le même sous-domaine. J'essaie d'éviter d'utiliser Greasemonkey sur ces scripts pour plusieurs raisons.La raison principale est que plusieurs personnes qui sont intéressées à ce que mon travail fonctionne n'ont pas accès à FF, et je ne suis pas assez audacieux pour essayer un de ces add-ons IE greasemonkey-like, ni intéressé à écrire plusieurs versions de le même jeu de scripts. Merci pour le lien HTML5. Je vais regarder dans l'affaire window.postMessage(). J'espère que ça va marcher pour moi – baiano

0

J'ai fait quelques autres tests et a constaté que:

WDOC = w.document; alerte (wdoc.location.href), alerte (wdoc.location.href);

afficherait d'abord 'non défini' mais la deuxième alerte afficherait l'URL correcte (de la nouvelle fenêtre) à partir de la fenêtre d'origine. J'ai donc fait quelques tests de plus et je suis arrivé à la conclusion que mes tentatives de la nuit dernière échouaient simplement parce que la fenêtre devait charger avant d'appeler les fonctions.

Alors maintenant, j'ai:

javascript: (function() {w = window.open (B1 , "CatchyPageTitleThatDoesn'tAppear"); setTimeout ("otherFunction();", 750) ;})(); function autreFonction() { wdoc = w.document; thisDoc = document; wdoc.setVariablesInTheFormInTheNewWindow; wdoc.forms [0] .submit();}

qui fonctionne! woohoo!

Et maintenant je passe à ce qui, pour moi, est la partie vraiment difficile. Je voudrais tirer des données supplémentaires à partir de URL1, le mettre dans un tableau et ensuite utiliser ce tableau pour définir les valeurs dans le formulaire sur URL2. Je devrais qualifier cela. Tableaux, données, formulaires, faciles. Je ne sais pas exactement comment procéder pour extraire les données. Il semble un peu comme ceci:

classe tbody = "première de deux apparitions"> tr> td>  /td> td> img />/td> td> img />/td> td> img />/td> td> img />/td> td> img />/td> td> img />/td> td> img />/td> td> img />/td> td> img/>/td> td> img />/td> td> img />/td>/tr> tr>

th>texte spécifique/th> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td>/tr> tr> th>

autres spécifications ic texte/th> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td> td> #/td>/tr>/tbody>

Alors, je sais (peut-être?) que je peux utiliser quelque chose comme

uglyText = wdoc.getElementsByClass ("première de deux apparences") [0] .innerHTML;

pour obtenir ce gâchis de données dans une chaîne, mais je ne sais pas comment procéder à partir de là. Je comprends le concept des expressions régulières et suppose que quelque chose comme ça pourrait fonctionner ici, mais je n'en ai jamais écrit un moi-même. De plus, il y a parfois 10 points de données et parfois 11, si cela est important.

A ce stade, je ne se soucient les # s specific_text-other_specific_text. Donc, toute suggestion simple qui me conduira à une solution qui les saisit dans l'ordre fera ma journée.

Merci encore pour l'aide.

Questions connexes