0

Internet Explorer <9 には Javascript 配列に関する問題があることを知っています。私はその場しのぎを使っ てみましたが、私の人生ではこれを理解することはできません.

基本的に、私はこのコードを持っています(かなり下に):

YUI.add('query-params', function (Y) {
  Y.QueryParams = {
  /**
  Parses our query string and returns an object containing the k/v pairs passed
  in rules

  @method parse
  @param {String} query string to parse
  @param {RegExp} regex rules to compare our query string against
  @return {Object} returns an object containing the k/v pairs that match
  */
  parse: function (qs, rules, params) {
    qs = qs.replace('?', ''); // remove ? from query string
    qs = qs.replace(/\+/g, ' ');
    var matches = rules.exec(qs);
    var defined_matches = Y.Array.filter(matches, function(m) {
      return ((typeof m != 'undefined') || ( m == true ));
    });

// rest of script omitted 

そして、次のように初期化されます。

  <script>
  YUI({
    modules: {
      'query-params': {
        fullpath: './parse_search_terms.js'
      }
    },
    onFailure: function (error) {
      console.log(JSON.stringify(error));
    }
  }).use('node', 'console', 'query-params', function (Y) {
    var params = Y.QueryParams.parse(window.location.search, /(\w+)\s(\w+)\s(\w+)|(\w+)\s(\w+)/ig, ["firstName", "lastName", "state"]);
    var url = "url_to_send_to?firstName=" + params.firstName + "&lastName=" + params.lastName + "&state=" + params.state;

    var iframe = Y.Node.create('<iframe></iframe>').setAttrs({
      src: url,
      frameBorder: 'no',
      height: 300,
      width: 800,
      scrolling: 'no'
});
    Y.one('#iframe').appendChild(iframe);
});

"q=john+smith+ca" のようなクエリ文字列を渡し、JSON.stringify 変数に一致する変数を渡すと、IE、Firefox、Chrome で得られるものは次のとおりです。

john smith ca,john,smith,ca,,

配列で Y.Array.filter を呼び出すと、Firefox と Chrome は正しく動作します。

defined ["john","smith","ca"]

ただし、Internet Explorer 8:

defined ["john","smith","ca","",""]

そのため、何らかの理由で IE が配列を適切にフィルタリングしていません。前述のアレイ シムとストップギャップをすべて試しましたが、何も機能していないようです。私は YUI3 を使用しているので、これはブラウザ間でかなり効率的だと思いますが、困惑しています。

誰にもアイデアはありますか?大変助かりました。

4

1 に答える 1

0

Doctype が設定されていない場合、IE は「quirks モード」になります。ページの上部に「」を追加すると、すべてが修正されました。

于 2013-01-24T16:36:34.747 に答える