2009-05-05 4 views
2

何らかの理由でwindow.location.hashが異なるブラウザで処理されています。window.location.hashで部分文字列を実行中

http://maps-demo.bytecraft.com.my/postdemo/parcel 
    #parcel/history/1?as=json&desc[]=ctime&desc[]=history_id 

を次のように私はURLを持っていると私は

window.location.hash.substring(14, window.location.hash.search(/\?/g)); 
にサブステートメントは似たものになるだろう。#小包/歴史/と?= JSON ...ように間で値を得ることに興味を持っている場合

firefox 3.0.10で問題なく動作していますが、同じ部分文字列の記述はOpera 9.60では動作しません。

は、いくつかの簡単な検索した後、私は常にURLエンコード文字列を返す必要があります

  • window.location.hashを助けるかもしれないいくつかの興味深い情報を見つけましたが、これはbugFirefox

た場合でありますURLのハッシュ部分にはエンコードされた文字が含まれています(Core_JavaScript_1.5_Reference:Global_Functions:encodeURIComponentを参照)。ハッシュはデコードされたURL部分を返します。これはFirefoxのバグです。 href、searchおよびpathnameは、正しいエンコードされたURL部分を返します。

  • オペラだけ#小包/歴史/ 1を返し、残りの文字列を無視し、これは私のサブステートメントが失敗した主な理由です...

は、私の場合、より良い方法はあります#parcel/history /と?as = json ....の間の文字列を抽出したいですか?

+1

あの大きさで虐待されたアンカータグは以前に見たこともありませんでした.Whow –

+0

hehかなり:) - – annakata

+0

@Deviant hehを指摘する価値があります.VMware Server 2.0がこのようなhttps://127.0.0.1 :8333/ui /#{e:%22HostSystem | ha-host%22、w:{t:真、i:0}} – Jeffrey04

答えて

1

これはあなただけではなく、ハッシュのwindow.location.hrefを使用しますが、なぜ正規表現を使用することができませんでした?問題

var get_hash_end = function(_hash) { 
     var result = _hash.length; 

     if(_hash.search(/\?/g) != -1) { 
      result = _hash.search(/\?/g); 
     } 

     return result; 
    }; 
0

に私の現在のソリューションですか。文字N.トライからsubstringingに基づく方法よりも信頼性が高いと未来セーフ:

window.location.href.match(/#parcel\/history\/(.*?)(\?|$)/)[1] 

正規表現は適切ではないすべての時間を答え、時にはそれはちょうどいいです。

編集:クリーンアップメソッドのカプセル化

function GetValue() 
{ 
    var m = window.location.href.match(/#parcel\/history\/(.*?)(\?|$)/); 
    return m ? m[1] : null; 
} 
4

これを試してみてください:

var match = window.location.href.match(/^[^#]+#([^?]*)\??(.*)/); 
var hashPath = match[1]; 
var hashQuery = match[2]; 

これはハッシュの以下の部分と一致します

…#parcel/history/1?as=json&desc[]=ctime&desc[]=history_id 
    \______________/ \____________________________________/ 
    hashPath   hashQuery 
0

あなたはまた、それを行うことができます:

var whatYouWant = window.location.hash.split( '?')[0] .substring(14);

関連する問題