2011-08-24 2 views
1

그래서 jQuery History 플러그인 (http://tkyk.github.com/jquery-history-plugin/)을 사용하고 있습니다. 또한 아래 스크립트를 사용하여 페이지를 전환했습니다. 그것이에 슬래시를 변환하는 이유 http://www.domain.com/#general%2Fhomepage 은 아무도 알아낼 수 http://www.domain.com/#general/homepagejQuery History 플러그인 URL 바꾸기가 잘못됨

로 전환해야한다 동안 :

$(document).ready(function() { 

    // Define the default pagetitle. 
    var defaultTitle = "MySite/"; 

    // Set a default pagetitle. 
    document.title = defaultTitle + "Homepage"; 

    // Switch the page. 
    function load(page) { 
     $("#contentHolder").fadeOut("fast",function(){ 
      $('#contentHolder').load("content/"+ page +".php"); 
      $("#contentHolder").fadeIn("fast"); 
     }); 
    } 

    // Function to shorten the scriptsize. 
    function reduceSize(mainUrl) { 
     // Define the URL. 
     var url = mainUrl; 
     // Replace the URL in the address bar. 
     url = url.replace(/^.*#/, ''); 
     // Load the page. 
     $.history.load(url); 
     return false; 
    } 

    // Enable history. 
    $.history.init(function(url) { 
     load(url == "" ? "general/homepage" : url); 
    }); 

    // Make the menu useful. 
    $('.switch_homepage').live('click', function(e) { 
     reduceSize("general/homepage"); 
     document.title = defaultTitle + "Homepage"; 
    }); 

}); 

내 문제는 내가 "홈페이지"버튼을 클릭 할 때마다, 페이지 스위치이다 HTML 형식?

감사합니다.

답변

2

플러그인 소스 (https://raw.github.com/tkyk/jquery-history-plugin/master/jquery.history.js)를 보면 인코딩을하는 것처럼 보입니다.

function initObjects(options) { 
    options = $.extend({ 
      unescape: false 
     }, options || {}); 

    locationWrapper.encoder = encoder(options.unescape); 

    function encoder(unescape_) { 
     if(unescape_ === true) { 
      return function(hash){ return hash; }; 
     } 
     if(typeof unescape_ == "string" && 
      (unescape_ = partialDecoder(unescape_.split(""))) 
      || typeof unescape_ == "function") { 
      return function(hash) { return unescape_(encodeURIComponent(hash)); }; 
     } 
     return encodeURIComponent; 
    } 

    function partialDecoder(chars) { 
     var re = new RegExp($.map(chars, encodeURIComponent).join("|"), "ig"); 
     return function(enc) { return enc.replace(re, decodeURIComponent); }; 
    } 
} 

당신은, 당신의 초기화에 unescape: true의 옵션을 설정하려고 그 작동하는지 확인할 수 있습니다.

+0

완벽하게 작동합니다. 이로 인해 스크립트가 불안정하거나 안전하지 않습니까? 고맙습니다. – Roel

+0

아니요.하지만 특정 문자가 URL에 허용되지 않아 망가질 수 있으므로주의하십시오. 그러나 URL을 제어하는 ​​한 너무 큰 거래가 있어서는 안됩니다. 모든 것들과 마찬가지로, 사용자가 URL을 통해 페이지를 변경하지 못하게함으로써 (직접 연결을 통해 다른 사람을 물리 칠 수 있음) 'eval'을 사용하지 말고 클라이언트의 입력을 신뢰하지 마십시오. 따라와 괜찮을거야. –