4

[ libphonenumber ]に基づいた簡単な電話番号パーサーを書いています。残念ながら、「http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js」の読み込みには永遠に時間がかかります。ファイルを取得してsrc="base.js"として含めると、たくさんのエラーがポップアップします。

私の推測では、これはライブラリがまだロードされていないため、goog.require()ステートメントが失敗しているためだと思います。

私に何ができる?

<!DOCTYPE html>
<html>
<head>
<title>Phone Number Parser</title>
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script>
  goog.require('goog.dom');
  goog.require('goog.json');
  goog.require('goog.proto2.ObjectSerializer');
  goog.require('goog.string.StringBuffer');
</script>
<script src="phonemetadata.pb.js"></script>
<script src="phonenumber.pb.js"></script>
<script src="metadata.js"></script>
<script src="phonenumberutil.js"></script>
</head>
<body>
<script>
numbers = ['6509066389', '+40723875777', '720-935-6433', '914-262-7178', '7123040634'];
for (i in numbers) {
    console.log(format_for_five9(numbers[i]));
}

function format_for_five9(phoneNumber) {
  var $ = goog.dom.getElement;
  var regionCode = 'US'; 
  var output = new goog.string.StringBuffer();
  try {
    var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
    var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);

    number_json_serial = goog.json.serialize(new goog.proto2.ObjectSerializer(goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(number));
    number_json = goog.json.parse(number_json_serial);

    if(phoneUtil.isValidNumberForRegion(number, regionCode)) {
        five9_format = number_json.national_number.toString();
    }
    else {
        five9_format = number_json.country_code.toString() + number_json.national_number.toString();
    }
  } catch (e) {
    output.append('\n' + e);
    console.log(e);
  }
  return five9_format;
}
</script>

</body>
</html>
4

2 に答える 2

11

クロージャーライブラリは、クロージャーコンパイラーと組み合わせて使用​​し、JavaScriptをコンパイルして本番用に縮小することを目的としています。本番環境でrawファイルとして使用することを目的としたものではありません。開発環境でも、http://plovr.com/を使用してJavaScriptを動的にコンパイルして提供できます。

クロージャは、型アノテーションとJavaのような構造のため、生の形式では非常に冗長です。クロージャコンパイラは、スクリプトを縮小するだけでなく、未使用のスクリプトを最適化および削除して、処理を高速化します。

これは、plovrを使用してJavaScriptコードを動的に提供する例です。

java -Xmx256m -jar plovr.jar serve -p 9811 /path/to/your/closure/config.js

これにより、localhost:9811でコンパイルされたjavascriptファイルが提供されます。生産用:

java -jar plovr.jar build /path/to/your/closure/config.js > production.js

javascriptをコンパイルまたは提供するようにplovrを構成する方法については、ドキュメントhttp://plovr.com/docs.htmlを参照してください。

于 2011-08-02T00:29:27.663 に答える
8

そもそもライブラリを直接リンクするべきではありません。

解決策は、ライブラリ全体をダウンロードして、上記のコードをホストするのと同じWebサーバーでホストすることです。javascriptは、 phonemetadata.pb.jsmetadata.jsなどと同じディレクトリに保存する必要があります。これにより、他のすべてのスクリプトと同じようにスクリプトを含めることができます。

<script src="base.js">

Closureは、git(git clone https://github.com/google/closure-library.git)を介して、またはzipファイルとしてダウンロードできます。

于 2011-08-02T00:29:15.177 に答える