Я нашел самый простой способ сделать это - назвать функцию, которая загружает внешний js-файл, тем же именем, что и функция во внешнем файле, которую я хочу запускать каждый раз, когда пользователь нажимает на букмарклет. Таким образом, при первом нажатии на букмарклет загружается внешний файл, и при последующих щелчках запускается функция во внешнем файле.
Вот код sudo:
Это будет код в ссылке ссылки на букмарклет
if( ! bookmarklet){
var bookmarklet = {
click: function(){
js = document.createElement('SCRIPT');
js.type = 'text/javascript';
js.src = 'http://external.js?' + (Math.random());
document.getElementsByTagName('head')[0].appendChild(js);
}
};
}
bookmarklet.click(); // this will be called everytime the bookmarklet is clicked
Файл external.js будет содержать функцию с таким же именем:
var bookmarklet = {
click:function(){
// insert logic you want to run every time the bookmarklet is clicked
}
};
bookmarket.click(); // run once after file is loaded
Таким образом, при загрузке внешнего файла ваша функция (например, функция bookmarklet.click) теперь запускает функцию внутри загруженного извне файла и не будет загружать внешний файл js во второй раз.