3

新しい CF11 モバイル機能は非常に複雑なレビューで受け取られていることを認識していますが、本当に単純なデバイス検出に使用できるかどうかを試してみたかったのですが、実際に機能するものは何も得られません.

たとえば、cfclientsettingsのドキュメント、特に「デバイス検出」見出しの下のページの最初の例を見ています。参照用のコードは次のとおりです (ここでは読みやすいように少し書式設定しています)。

<cfClientSettings detectDevice=true /> 
<cfclient>
    <cffunction access="public" name="showCanvasSupport" returntype="void">
        <cfset evalStr = "document.getElementById('canvas').innerHTML='" & cfclient.canvas & "'">
    </cffunction>
</cfclient>

Canvas support -<b id="canvas"></b><br>
<button onclick="invokeCFClientFunction('showCanvasSupport',null)">Show canvas support</button>

新しい .cfm ページを作成し、このコードを追加すると、ページにテキストとボタンが生成されますが、ボタンをクリックすると Chrome で JS エラーがスローされます。 ]、successCallback、failureCallback。functionName、successCallback、failureCallback は必須です。successCallback または failureCallback がない場合は、null を値として渡すことができます。"

わかりました、良くありません。そこで、さらにいくつかのドキュメントを確認し、欠落しているコールバックを修正するために、invokeCFClientFunction() 呼び出しに別の null 引数を追加することにしました。これにより、少なくとも JS エラーは修正されますが、ボタンをクリックしても何も起こりません。

そのため、さらに大騒ぎした後、次のコードにたどり着きました。これはまだ機能しませんが、より近いようです。

<cfClientSettings detectDevice=true />
<cfclient>
    <cffunction access="public" name="showCanvasSupport" returntype="void">
        <cfscript>
            document.getElementById('canvas').innerHTML=cfclient.canvas;
        </cfscript>
    </cffunction>
</cfclient>

Canvas support -<b id="canvas"></b><br>
<button onclick="invokeCFClientFunction('showCanvasSupport',null,null)">Show canvas support</button>

したがって、このコードは、ボタンをクリックすると、canvas 要素の innerHTML を「未定義」に設定します。素晴らしい。

正直なところ、私は cfclient を使用するために見つけることができるすべての例を試してきましたが、どれも機能しません。私が見逃している秘密はありますか?CFBuilder で「モバイル プロジェクト」を作成していない場合、この機能は機能しないのではないかという疑念をこっそり持っています。もしそうなら、それはばかげており、実際にはドキュメントでそれを述べていません。

最後に、私がやろうとしているのは、基本的なデバイス検出に cfclient を使用し、ブラウザ/デバイスの幅を取得して、「メディアクエリの使用」セクションと非常によく似た基本的なメディアクエリスタイルの検出を行うことです。cfclientsettingsドキュメントの 幅を取得して、それに基づいてセッション変数を設定したいだけです。

IIS を使用してセットアップした Win7 マシンで、CF11 の完全にパッチが適用された開発者バージョンを実行しています。あらゆるサポートを歓迎します。

Adobe フォーラムへのクロス投稿: https://forums.adobe.com/thread/1929387

4

2 に答える 2

2

しばらくキーボードを叩いた後、cfclient スコープが機能するようになりました。

ドキュメントで最終的にこのページを見つけました:デバイス検出

一見すると、このページはcfclientsettingsのドキュメント ページとほとんど同じに見えますが、コード例も同じです。

ただし、cfclientsettingsドキュメントでは、次のようにスコープを使用しています。

cfclient.canvas

Device Detection doc ページには、次のように書かれています。

cfclient.properties.canvas

ブーム。もちろんそれだけで済みました。時間の無駄です。そこに「.properties」を追加すると、すべての cfclient スコープ変数が正常に機能します。

cfclientsettings doc が単純に間違っているのか、それとも別のコンテキストで参照しているのかはまだわかりません。私は間違いなくその点にコメントを追加します。

(また、JavaScript は両方のバージョンのドキュメントでこの例ではまだ失敗するため、それがあります。)

これが、単純な ColdFusion クライアント デバイスの検出を行いたい人に役立つことを願っています。

于 2015-08-18T12:56:34.277 に答える
1

この回答の前に、私は cfclient を使用したことがなく、使用のためにオンラインで見つけたドキュメントを中継しているだけであることを述べさせてください。コメントするには長すぎました。

あなたは次のように述べました:

CFBuilder で「モバイル プロジェクト」を作成していない場合、この機能は機能しないのではないかと疑っています。もしそうなら、それはばかげており、実際にはドキュメントでそれを述べていません。

彼らは実際にドキュメントでそれを述べていると思います。これが私が見つけたものです。クライアント側 CFML (モバイル開発用)ドキュメントの冒頭には、次のように記載されています。

始める前に –このドキュメントで提供されている例を試すには、ColdFusion モバイル開発環境をセットアップする必要があります。開発環境の構成を参照してください。

かなり内容が濃いため、ここですべての情報を繰り返すつもりはありませんが、開発環境の設定ページには、ColdFusion Server 11 をインストールし、ColdFusion Builder をインストールしてから、Builder 内で「ColdFusion モバイル プロジェクト」を作成する必要があると記載されています。 .

ただし、そのページには、ColdFusion Builder 内から「CF Mobile Nature をプロジェクトに適用する既存のプロジェクトの移行」の手順に従って、既存の ColdFusion プロジェクトを自動的に変換できることも記載されています。これはあなたが見逃している作品かもしれません。

私が参照したドキュメントを読んでいただければ、理解できると思います。また、プロセス全体の概要が記載されているBuilding Mobile Applicationsドキュメントへのリンクもここにあります。

于 2015-08-18T12:15:20.213 に答える