2016-12-23 9 views
0

私は、レコードが基本的にアイテムを持つドキュメントであるMVC Webデータベースアプリケーションを持っています。IIOS IPAD No load、beforeunloador、paghide events

文書はロックされており、アイテムではなく、ユーザーが任意の文書に対して4つまたは5つの異なる画面を表示するとコードによってロックされます。 レコードロックに10分のタイムアウトがあります。ユーザーはレコードで10分間何もしないで、別のユーザーがレコードを取得できます。ロックが失われて他の誰かによって取得されたことを検出するコードがあります。それはうまく動作し、技術的には健全です。

アプリケーションのワークフローは、ユーザーが画面を離れるか、ブラウザを閉じるとき、またはユーザーが更新ボタンを押したときに解放されるロックに依存します。

これらはWindowsとAndroidではうまく動作しますが、ipadではうまく動作しません。

私は

アン

または

があったものの、IOSに

をbeforeunloadが、私はありません理解

これらの作業のどちら

pageHide。

ここに私のコードです。

var isOnIOS = navigator.userAgent.match(/ iPad/i)|| navigator.userAgent.match(/ iPhone/i); var eventName = isOnIOS? "pageHide": "beforeunload";

window.addEventListener(eventName、function(event){ ReleaseRecordLock();});

このコードは、IOS上でイベントが発生しないことを除いて、前述のすべてのプラットフォームで機能します。

これはAppleの面で慎重だと思うので、私はそれが変わるとは思わない。

だから今質問があります。

ユーザーが画面を変更したりブラウザを閉じると、これらのレコードのロックが解除されるようにするにはどうすればよいですか。彼らがいない場合、ユーザーは10分間ドキュメントにアクセスすることができません。これは受け入れられません。

ありがとうございました

編集...私はポップアップや通知は必要ありません。私はちょうど信頼性の高いロック解除が必要です

答えて

0

上記のように、実際に動作するはずのイベントはありません。 pageHideとunloadは何もしません。

この問題を回避する方法についての説明がありましたが、詳細はありませんので、ここで詳しく説明しますが、

このソリューションは、エリアと標準サイトで動作します。

これを回避する私のソリューションは、ブラウザがIOS上で動作しているかどうかを検出し、そうであればメニュー内のリンクを変更することでした。

アプリケーション内のすべてのリンクに、IOSReleaseLock()という名前の機能がなければなりません。そうしないと、解決策は機能しません。すべてのページがレコードをロックするわけではなく、実際にドキュメントを変更するレコードだけです。レポートの変更、パスワード変更、ログアウト、システム管理者などの基本的なWebサイト機能では、レコードロックは必要ありません。私はIOSReleaseLockの2つのバージョンを(持っているこの時点で

これはアンロック必要ないページで使用されているバージョンです。

function IOSReleaseLock(_controller, _action) 
    { 
     var url = '/__controller__/__action__/'; 
     url = url.replace('__controller__', _controller); 
     url = url.replace('__action__', _action); 
     window.location.href = url; 
    } 

これは、ロック解除が必要なページに配置されたバージョンです。

function IOSReleaseLock(_controller, _action) 
{ 
    var url = '/__controller__/__action__/'; 
    url = url.replace('__controller__', _controller); 
    url = url.replace('__action__', _action); 
    UnloadingRecordLockRelease();  
    window.location.href = url;  
} 

すべてのリンクにはラッパーが付いているため、1ページごとにIOSReleaseLock()のバージョンをロードする必要があります。これには、/ home/indexやアプリケーションの起動場所が含まれます。あなたが1つを欠場した場合、そのページにいれば、メニューシステムのリンクはもはや機能しません。

UnloadingRecordLockRelease()関数がそのバージョンをロードする必要があり、ロック解除を必要としないページで最初のバージョンが読み込まれるページ。

IOSでは、リンクをクリックするたびにIOSReleaseLock()が呼び出されます。これは明らかなようですが、わかりやすくするために、実行するIOSReleaseLock()のバージョンは、現在のページにあるバージョンであり、あなたが行っているページのバージョンではありません。

ユーザーがサイトにとどまり、ブラウザを閉じない限り、レコードは正しくロック解除されます。

ユーザがログアウトすると、すべてのレコードがロック解除されますが、ブラウザタブが閉じているとき、またはユーザがログアウトせずにブラウザが閉じたときの解決策はありません。