CDO.Messageオプションを設定するときに使用されるf(x)= y JScriptイディオムのJavaScriptフレンドリーな代替

StackOverflow https://stackoverflow.com/questions/468089

質問

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 に追加します。しかし、確かに私の解決策は少しハッキーです。ほとんどの場合、あなたのほうがきれいだと思うので、共有してくれてありがとう。

-サイモン

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top