CDO.Messageオプションを設定するときに使用されるf(x)= y JScriptイディオムのJavaScriptフレンドリーな代替
-
19-08-2019 - |
質問
JScriptで記述されたCDO.Messageを使用して電子メールを送信するASPページがあります。 SMTPサーバー(およびその他のオプション)を指定するために、次のようなことをしています:
mail.Configuration.Fields.Item(
"http://schemas.microsoft.com/cdo/configuration/smtpserver") =
"smtp.example.com";
さて、ここからがキャッチです。このコードは、ブラウザで(JsUnitなどを使用して)単体テストを実行できるように、JavaScriptとしてHTMLページに含めるスタンドアロンのインクルードファイルにあります。含まれているJScriptコードのモックASP環境を作成するJavaScriptモックオブジェクト(サーバー、リクエストなど)があります。私が残した唯一の問題は、CDO.Messageオプションの設定にあります。上記のコードの抜粋で使用されているf(x) = y
構文は有効なJavaScript(無効な左オペランド)ではないため、このコードを(そのままで)ブラウザー内で実行できません。現在、ユニットテストで、環境が本当にASPであるかどうかを検出する条件付きで単純にバイパスしています。
これにJavaScriptの回避策があるとは思わない。構文的にも有効なJavaScriptになるCDO.Messageオプションを設定するための代替構文(ActiveXインターフェイスの使用方法が異なる場合)を探しています。
解決
http://msdn.microsoft.com/en-us/library/ms526318(EXCHG.10).aspx 。
解決策は、Value
プロパティに明示的に割り当てを行うことです:
mail.Configuration.Fields.Item(
"http://schemas.microsoft.com/cdo/configuration/smtpserver").Value =
"smtp.example.com";
この方法では、上記のコードは有効なJavaScriptであり、モックのConfigurationオブジェクトでテストできます。
他のヒント
IISのサーバー側Javascriptを作成するときに同じ問題が発生しました。IDEの構文チェッカーでf(x) = y
構文が失敗していました。役に立つとわかった解決策は、次のようなJScriptの条件付きコメントでした。
f(x)/*@cc_on@if(0)*/[0]/*@end@*/ = y;
MicrosoftのJScriptエンジンで実行している場合、末尾に添え字インデックス[0]を except に追加します。しかし、確かに私の解決策は少しハッキーです。ほとんどの場合、あなたのほうがきれいだと思うので、共有してくれてありがとう。
-サイモン