views:

78

answers:

1

I'm trying to write a bookmarklet that will allow me to view the Web Of Trust (WOT) ratings for all the links on a page before visiting them. While WOT provides their own bookmarklet, it is not very useful since you need to visit the page first before viewing the rating. This will be used on SeaMonkey, so I can't just install the WOT extension, either.

WOT has a Javascript API that allows you to activate the ratings on any page it is included in, so I am using that as a base. However, it never seems to work correctly as a bookmarklet. Here's one attempt where I tried to keep the code as close to the API as possible. I only modified the wotinject function so that it would work in a bookmarklet and added a timeout so that the rating widget wouldn't be loaded before jQuery.

var wotprotocol = (document.location.protocol == "https:") ? "https://" : "http://";
var wotbase = wotprotocol + "api.mywot.com/widgets";
var wotinject = function(src) {
  document.body.appendChild(document.createElement("script")).src = wotbase + "/" + src + ".js";
};
var wotjquery = typeof(jQuery) != "undefined";
if (!wotjquery) {
  wotinject("jquery");
}
void(window.setTimeout(wotinject, 200, "ratingwidget"));

I can see the APIs being loaded in the status bar, but it doesn't do anything at all. Is there any way to get this working?

A: 

I'm not sure if this answers your question, but I use a bookmarklet in production that loads jQuery. This code works fine for me:

load = function() {
    load.getScript("http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js");
    // do stuff when jQuery finishes loading.
    load.tryReady(0);
}
load.getScript = function(filename) {
    var fileref = document.createElement('script');
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", filename);
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref);
}
load.tryReady = function(time_elapsed) {
    /* Continually polls for jQuery library. */
    if (typeof $ == "undefined") {
     if (time_elapsed <= 5000) {
      setTimeout("load.tryReady(" + (time_elapsed + 200) + ")", 200);
     } else {
      alert("Timed out while loading jQuery.");
     }
    } else {
     /************ JQUERY IS NOW LOADED, PUT CODE HERE ****************/
    }
}
load();
Stephen J. Fuhry