0

phonegap アプリケーションを Android および iOS から WP8 に移動する際に問題が発生しています。一部の言語の .JSON ファイルを読み込もうとするとクラッシュするようです。私が使用しているバージョンは phonegap 2.9.0 と jQuery 2.0.3 です。Android と iOS では、すべてが意図したとおりに機能しています。

コンソール出力:

'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Runtime.Serialization.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Updating IsolatedStorage for APP:DeviceID :: ********-****-****-****-***********
CordovaBrowser_Navigated :: www/index.html
CommandString : Device/getDeviceInfo/Device899915039/[]
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded         'C:\windows\system32\System.ServiceModel.Web.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\en-US\mscorlib.debug.resources.dll'. Module was built without symbols.
CommandString : NetworkStatus/getConnectionInfo/NetworkStatus899915040/[]
An exception of type 'System.NotSupportedException' occurred in Microsoft.Phone.ni.dll and wasn't handled before a managed/native boundary
The thread 0x1160 has exited with code 259 (0x103).
The thread 0x80c has exited with code 259 (0x103).
CommandString : DebugConsole/log/DebugConsole899915041/"Received Event: deviceready"
Log:["Received Event: deviceready","DebugConsole899915041"]
The thread 0x8c8 has exited with code 259 (0x103).
CommandString : File/readResourceAsText/File899915042/["localization/nb-NO.json"]
A first chance exception of type 'System.IndexOutOfRangeException' occurred in no.visma.patentstyret.DLL
An exception of type 'System.IndexOutOfRangeException' occurred in no.visma.patentstyret.DLL but was not handled in user code

これは、言語ファイルの ajax 読み込みです。

 var _loadDataSet = function(callback) {
        $.ajax({url: "localization/" + _language + ".json", async: false, dataType: 'json', success: function(data) {
            _dataSet = data;
            if(callback) {
                callback();
            }
        }}).error(function(e) {
            console.error("Error in language files.");
            console.error(e);
        });
    };

どこから始めればいいのかわからないので、助けていただければ幸いです。

4

2 に答える 2

0

解決策は、XMLHttpRequest を使用することでした。Android、iPhone、および Windows Phone 8 でテスト済みで動作します。ローカル言語ファイルをロードするための解決策は、データを JavaScript クラスに追加することでしたが、WP8 の PhoneGap を使用したクロスドメイン リクエストにはまだ問題がありました。

WP8 でクロス ドメイン リクエストを実現するために、XMLHttpRequests を使用しました (JSONP も使用できますが、これは他の形式もサポートします)。これは私が最終的に使用したラッパークラスです:

(function() {
    name.of.package.HTTPRequest = function(destination, success, error, contentType) {
        var STATUS_IDLE = 0;
        var STATUS_OPEN = 1;
        var STATUS_LOADED = 2;
        var STATUS_WORKING = 3;
        var STATUS_DONE = 4;

        var req = new XMLHttpRequest();
        req.open('GET', destination, true);

        if(contentType) {
            req.setRequestHeader("Content-Type", contentType);
        }
        else {
            req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
        }

        req.onreadystatechange = function(aEvt) {
            if(req.readyState == STATUS_DONE) {
                if(req.status == 200) {
                    if(success) {
                        success(req.responseText);
                    }
                }
                else {
                    if(error) {
                        error("Response returned with error code: " + req.status);
                    }
                }
            }
        };

        req.send(null);
    };
}) ();
于 2013-09-17T13:56:31.507 に答える