Der Code sieht zwar nach viel aus, wichtig ist aber nur die Funktion createUI() ganz unten, den Rest hab ich nur eingefügt, damit der Kontext ersichtlich ist.
Bookmarklet
minBookmarklet.js
Zunächst geht man auf eine Internetseite und dann ruft man das Bookmarklet auf. Dadurch wird minBookmarklet.js in die Seite integrierd und ein jQuery Dialog öffnet sich. Zudem werden noch die folgenden Dateien nachgeladen:
- jquery-1.5.1.min.js
- jquery-ui-1.8.10.custom.min.js
- jquery-ui-1.8.10.custom.css
Wenn ich nun den jQuerry Dialog schließe wird die Funktion unloadScripts aufgerufen.
Diese entfernt dann alle Integrierten Dateien.
In Firebug sieht man auch dass im <head> tag alle integrierten Dateien weg sind.
Doch wenn ich nun erneut auf das Bookmarklet klicke steht da "First please close the open minBookmarklet" was ja der else Zwei meines Bookmarklet ist, der nur aufgerufen wird wenn ein minBook Objekt bereits exisitert. Nur versteh ich nicht wieso, weil ich doch alle Dateien mit remove entfernt habe.
Bookmarklet
Code:
javascript:
(
function()
{
if(typeof(window.minBook) == 'undefined')
{
var x = document.createElement('SCRIPT');
x.type='text/javascript';
x.src='../minBookmarklet.js';
document.getElementsByTagName('head')[0].appendChild(x);
}
else
{
alert('First please close the open minBookmarklet');
}
}
)();
minBookmarklet.js
Code:
//"class" minBook
function minBook()
{
minBook.init = init;
minBook.bootstrapJQuery = bootstrapJQuery;
minBook.jQueryLoadTest = jQueryLoadTest;
minBook.bootstrapJQueryUI = bootstrapJQueryUI;
minBook.jQueryUILoadTest = jQueryUILoadTest;
minBook.createUI = createUI;
}
/*--------------------------------------------------------------------------------------------------------------
Function: init()
---------------------------------------------------------------------------------------------------------------*/
function init()
{
minBook.bootstrapJQuery();
}
/*--------------------------------------------------------------------------------------------------------------
Function: bootstrapJQuery()
---------------------------------------------------------------------------------------------------------------*/
function bootstrapJQuery()
{
if( (typeof(jQuery) == 'undefined')|| (jQuery.fn.jquery != '1.5.1') )
{
//jQuery javascript
var jQueryScript = document.createElement("script");
jQueryScript.type = "text/javascript";
jQueryScript.src= "../jquery-1.5.1.min.js";
document.getElementsByTagName("head")[0].appendChild(jQueryScript);
}
minBook.jQueryLoadTest();
}
/*--------------------------------------------------------------------------------------------------------------
Function: jQueryLoadTest()
---------------------------------------------------------------------------------------------------------------*/
function jQueryLoadTest()
{
if(typeof(jQuery) == 'undefined')
window.setTimeout(minBook.jQueryLoadTest,100);
else minBook.bootstrapJQueryUI();
}
/*--------------------------------------------------------------------------------------------------------------
Function: bootstrapJQueryUI()
---------------------------------------------------------------------------------------------------------------*/
function bootstrapJQueryUI()
{
//jQuery UI javascript
var jQueryUIScript = document.createElement("script");
jQueryUIScript.type = "text/javascript";
jQueryUIScript.src= "../jquery-ui-1.8.10.custom.min.js";
document.getElementsByTagName("head")[0].appendChild(jQueryUIScript);
//jQuery-ui stylesheet
var jQueryUICSSLink = document.createElement("link");
jQueryUICSSLink.type = "text/css";
jQueryUICSSLink.rel = "stylesheet";
jQueryUICSSLink.href = "../jquery-ui-1.8.10.custom.css";
document.getElementsByTagName("head")[0].appendChild(jQueryUICSSLink);
minBook.jQueryUILoadTest();
}
/*--------------------------------------------------------------------------------------------------------------
Function: jQueryLoadTest()
---------------------------------------------------------------------------------------------------------------*/
function jQueryUILoadTest()
{
if(typeof(jQuery.ui) == 'undefined')
window.setTimeout(minBook.jQueryUILoadTest,100);
else minBook.createUI();
}
/*--------------------------------------------------------------------------------------------------------------
Function: createUI()
---------------------------------------------------------------------------------------------------------------*/
function createUI()
{
var dialogContent = jQuery('<div id="Mydiv" style="background-color:yellow;">hello World</div>');
jQuery(document).ready(function(){
jQuery(dialogContent).dialog({
title: 'My Dialog',
position: [10,10],
resizable: false,
width: 515,
close: function()
{
unloadScripts();
}
});
});
}
function unloadScripts()
{
var HtmlCode = $('html');
$('[src^=../jquery-1.5.1.min.js"]', HtmlCode).remove();
$('[src^="../jquery-ui-1.8.10.custom.min.js"]', HtmlCode).remove();
$('[href^="../jquery-ui-1.8.10.custom.css"]', HtmlCode).remove();
$('[src^="../minBookmarklet.js"]', HtmlCode).remove();
}
/*********************************************************************************************************************************************
* Invoke *
*********************************************************************************************************************************************/
new minBook();
minBook.init();
Zunächst geht man auf eine Internetseite und dann ruft man das Bookmarklet auf. Dadurch wird minBookmarklet.js in die Seite integrierd und ein jQuery Dialog öffnet sich. Zudem werden noch die folgenden Dateien nachgeladen:
- jquery-1.5.1.min.js
- jquery-ui-1.8.10.custom.min.js
- jquery-ui-1.8.10.custom.css
Wenn ich nun den jQuerry Dialog schließe wird die Funktion unloadScripts aufgerufen.
Diese entfernt dann alle Integrierten Dateien.
In Firebug sieht man auch dass im <head> tag alle integrierten Dateien weg sind.
Doch wenn ich nun erneut auf das Bookmarklet klicke steht da "First please close the open minBookmarklet" was ja der else Zwei meines Bookmarklet ist, der nur aufgerufen wird wenn ein minBook Objekt bereits exisitert. Nur versteh ich nicht wieso, weil ich doch alle Dateien mit remove entfernt habe.