Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema jquery.history.js

    Buon pomeriggio a tutti, mi sono imbattuto in ajax per le chiamate asincrone, ma aimè la gestione di mantenere la pagina visitata attiva, anche al refresh della stessa, senza tornare alla pagina principale, la volevo gestire attraverso lo script jquery.history.js scaricabile a questo indirizzo http://www.mikage.to/jquery/jquery_history.html.

    Purtroppo non capisco come mai, su questo sito funziona ma se metto tutto in una cartella in localhost o la richiamo senza l'ausilio di un webserver non funziona.

    Praticamente c'è il passaggio di valore che viene intercettato da un'alert, ma non mi crea la pagina che voglio richiamare.
    Questo è quello che ho:

    //pagina html
    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    	<title>history plugin</title>
    	<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
    	<script type="text/javascript" src="jquery.history.js"></script>
    	<script type="text/javascript">
    	// PageLoad function
    	// This function is called when:
    	// 1. after calling $.historyInit();
    	// 2. after calling $.historyLoad();
    	// 3. after pushing "Go Back" button of a browser
    	function pageload(hash) {
    		// alert("pageload: " + hash);
    		// hash doesn't contain the first # character.
    		if(hash) {
    			// restore ajax loaded state
    			if($.browser.msie) {
    				// jquery's $.load() function does't work when hash include special characters like aao.
    				hash = encodeURIComponent(hash);
    			}
    			$("#load").load(hash + ".html");
    		} else {
    			// start page
    			$("#load").empty();
    		}
    	}
    	
    	$(document).ready(function(){
    		// Initialize history plugin.
    		// The callback is called at once by present location.hash. 
    		$.historyInit(pageload, "jquery_history.html");
    		
    		// set onlick event for buttons
    		$("a[rel='history']").click(function(){
    			// 
    			var hash = this.href;
    			hash = hash.replace(/^.*#/, '');
    			// moves to a new page. 
    			// pageload is called at once. 
    			// hash don't contain "#", "?"
    			$.historyLoad(hash);
    			return false;
    		});
    	});
    	</script>
    </head>
    <body>
    	<h1>jquery history plugin</h1>
    	This plugin helps you make your Ajax-driven page available for "Go Back" button and "bookmark" of browser.
    
    	source: jquery.history.js (Last Update: 2009/10/14)
    
    	
    
    	jquery history bbs
    
    	
    
    	Work on IE8, FireFox 4.0, Opera9, Safari 4.0, Chrome 2.0. 
    
    	
    
    	
    
    	[xhtml 1.0 test]
    	[IE7 compatible mode test]
    	
    
    	<hr>
    	Ajax load
    
    	load 1
    
    	load 2
    
    	load 3
    
    	load aao
    
    	<button name="history" value="#1" onClick="">Prova</button>
    	
    
    	<hr>
    	Loaded html:
    
    	<div id="load"></div>
    	<hr>
    	<h1>update history</h1>
           
    </boby>
    </html>
    //script inclusi nell'head
    codice:
    //jquery.history.js
    
    /*
     * jQuery history plugin
     * 
     * sample page: http://www.mikage.to/jquery/jquery_history.html
     *
     * Copyright (c) 2006-2009 Taku Sano (Mikage Sawatari)
     * Licensed under the MIT License:
     *   http://www.opensource.org/licenses/mit-license.php
     *
     * Modified by Lincoln Cooper to add Safari support and only call the callback once during initialization
     * for msie when no initial hash supplied.
     */
    
    
    jQuery.extend({
    	historyCurrentHash: undefined,
    	historyCallback: undefined,
    	historyIframeSrc: undefined,
    	historyNeedIframe: jQuery.browser.msie && (jQuery.browser.version < 8 || document.documentMode < 8),
    	
    	historyInit: function(callback, src){
    		jQuery.historyCallback = callback;
    		if (src) jQuery.historyIframeSrc = src;
    		var current_hash = location.hash.replace(/\?.*$/, '');
    		
    		jQuery.historyCurrentHash = current_hash;
    		if (jQuery.historyNeedIframe) {
    			// To stop the callback firing twice during initilization if no hash present
    			if (jQuery.historyCurrentHash == '') {
    				jQuery.historyCurrentHash = '#';
    			}
    		
    			// add hidden iframe for IE
    			jQuery("body").prepend('<iframe id="jQuery_history" style="display: none;"'+
    				' src="javascript:false;"></iframe>'
    			);
    			var ihistory = jQuery("#jQuery_history")[0];
    			var iframe = ihistory.contentWindow.document;
    			iframe.open();
    			iframe.close();
    			iframe.location.hash = current_hash;
    		}
    		else if (jQuery.browser.safari) {
    			// etablish back/forward stacks
    			jQuery.historyBackStack = [];
    			jQuery.historyBackStack.length = history.length;
    			jQuery.historyForwardStack = [];
    			jQuery.lastHistoryLength = history.length;
    			
    			jQuery.isFirst = true;
    		}
    		if(current_hash)
    			jQuery.historyCallback(current_hash.replace(/^#/, ''));
    		setInterval(jQuery.historyCheck, 100);
    	},
    	
    	historyAddHistory: function(hash) {
    		// This makes the looping function do something
    		jQuery.historyBackStack.push(hash);
    		
    		jQuery.historyForwardStack.length = 0; // clear forwardStack (true click occured)
    		this.isFirst = true;
    	},
    	
    	historyCheck: function(){
    		if (jQuery.historyNeedIframe) {
    			// On IE, check for location.hash of iframe
    			var ihistory = jQuery("#jQuery_history")[0];
    			var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
    			var current_hash = iframe.location.hash.replace(/\?.*$/, '');
    			if(current_hash != jQuery.historyCurrentHash) {
    			
    				location.hash = current_hash;
    				jQuery.historyCurrentHash = current_hash;
    				jQuery.historyCallback(current_hash.replace(/^#/, ''));
    				
    			}
    		} else if (jQuery.browser.safari) {
    			if(jQuery.lastHistoryLength == history.length && jQuery.historyBackStack.length > jQuery.lastHistoryLength) {
    				jQuery.historyBackStack.shift();
    			}
    			if (!jQuery.dontCheck) {
    				var historyDelta = history.length - jQuery.historyBackStack.length;
    				jQuery.lastHistoryLength = history.length;
    				
    				if (historyDelta) { // back or forward button has been pushed
    					jQuery.isFirst = false;
    					if (historyDelta < 0) { // back button has been pushed
    						// move items to forward stack
    						for (var i = 0; i < Math.abs(historyDelta); i++) jQuery.historyForwardStack.unshift(jQuery.historyBackStack.pop());
    					} else { // forward button has been pushed
    						// move items to back stack
    						for (var i = 0; i < historyDelta; i++) jQuery.historyBackStack.push(jQuery.historyForwardStack.shift());
    					}
    					var cachedHash = jQuery.historyBackStack[jQuery.historyBackStack.length - 1];
    					if (cachedHash != undefined) {
    						jQuery.historyCurrentHash = location.hash.replace(/\?.*$/, '');
    						jQuery.historyCallback(cachedHash);
    					}
    				} else if (jQuery.historyBackStack[jQuery.historyBackStack.length - 1] == undefined && !jQuery.isFirst) {
    					// back button has been pushed to beginning and URL already pointed to hash (e.g. a bookmark)
    					// document.URL doesn't change in Safari
    					if (location.hash) {
    						var current_hash = location.hash;
    						jQuery.historyCallback(location.hash.replace(/^#/, ''));
    					} else {
    						var current_hash = '';
    						jQuery.historyCallback('');
    					}
    					jQuery.isFirst = true;
    				}
    			}
    		} else {
    			// otherwise, check for location.hash
    			var current_hash = location.hash.replace(/\?.*$/, '');
    			if(current_hash != jQuery.historyCurrentHash) {
    				jQuery.historyCurrentHash = current_hash;
    				jQuery.historyCallback(current_hash.replace(/^#/, ''));
    			}
    		}
    	},
    	historyLoad: function(hash){
    		var newhash;
    		hash = decodeURIComponent(hash.replace(/\?.*$/, ''));
    		
    		if (jQuery.browser.safari) {
    			newhash = hash;
    		}
    		else {
    			newhash = '#' + hash;
    			location.hash = newhash;
    		}
    		jQuery.historyCurrentHash = newhash;
    		
    		if (jQuery.historyNeedIframe) {
    			var ihistory = jQuery("#jQuery_history")[0];
    			var iframe = ihistory.contentWindow.document;
    			iframe.open();
    			iframe.close();
    			iframe.location.hash = newhash;
    			jQuery.lastHistoryLength = history.length;
    			jQuery.historyCallback(hash);
    		}
    		else if (jQuery.browser.safari) {
    			jQuery.dontCheck = true;
    			// Manually keep track of the history values for Safari
    			this.historyAddHistory(hash);
    			
    			// Wait a while before allowing checking so that Safari has time to update the "history" object
    			// correctly (otherwise the check loop would detect a false change in hash).
    			var fn = function() {jQuery.dontCheck = false;};
    			window.setTimeout(fn, 200);
    			jQuery.historyCallback(hash);
    			// N.B. "location.hash=" must be the last line of code for Safari as execution stops afterwards.
    			//      By explicitly using the "location.hash" command (instead of using a variable set to "location.hash") the
    			//      URL in the browser and the "history" object are both updated correctly.
    			location.hash = newhash;
    		}
    		else {
    		  jQuery.historyCallback(hash);
    		}
    	}
    });
    lo script jquery-1.3.2.min.js non lo posto perchè troppo lungo.

    Ora, sapreste dirmi cortesemente come mai ho questo problema su tutti i browser?
    Grazie mille...Buon proseguimento

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133

    Re: Problema jquery.history.js

    Originariamente inviato da ANTAGONIA

    Purtroppo non capisco come mai, su questo sito funziona ma se metto tutto in una cartella in localhost o la richiamo senza l'ausilio di un webserver non funziona.
    Probabilmente per motivi di protezione del browser che "blocca" il javascript quando pubblicherai il sito/pagina il problema si risolverà, se dovesse girare in locale o installi un webserver (apache/iss) oppure modifichi (se possibile) le impostazioni del browser, è solo un ipotesi sui dati forniti
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    ciao Andrea grazie per avermi risposto, però una curiosità.
    Se i due browser FF e IE bloccassero gli script javascript, li dovrebbero bloccare sempre e non solo per i siti in localhost.O sbaglio?

    Ho pubblicato su apache che sta nel pacchetto xampp, non so se lo conosci.
    Solitamente non ho problemi ma solo in questo frangente...

    Se hai altre idee, fammi sapere...
    Cmq ora che ci penso ho notato una cosa, forse può essere utile.

    Pagina jquery_history.html
    codice:
    //script nella pagina jquery_history.html
    // set onlick event for buttons
    		$("a[rel='history']").click(function(){
    
    //tag nella pagina jquery_history.html
    load 1
    Se ci fai caso c'è quel rel="history", aprendo la pagina con dreamweaver, mi restituisce un errore sul link, proprio sull'attributo rel, in pratica non è un attributo valido.

    Boh!!!
    Grazie ancora e buona serata.

  4. #4
    ari eccome...
    ho provato anche a sostituire quel rel con gli attributi name e id in questo modo:

    codice:
    //js
    $("a[id='history']").click(function(){
    
    //oppure
    $("a[name='history']").click(function(){
    
    
    //pagina html
    load 1
    Spero tu possa illuminarmi...

  5. #5
    nessuno può aiutarmi?per favore?

  6. #6

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.