【Salesforce】SafariでVFページが勝手にトップへスクロールされる

【Salesforce】SafariでVFページが勝手にトップへスクロールされる

少し前からたまに修正依頼がきます。

iPadやiphoneでVisualforceページを閲覧していると、何らかのイベントが発生したタイミングでページが一番上へスクロールされる、という問題です。

縦に長いページで起こる問題のようですね。

ボタンすら動かないとかで、お客さんが怒ってました。

なかなか解決策が出てきませんでしたが、頭が良い人はたくさんいるものです。
https://success.salesforce.com/issues_view?id=a1p30000000T2oLAAS

上のURLにも書かれていますが、サポートされているわけではないので自己責任で使ってね、とのころです。

その1

(function(){try{var a=navigator.userAgent; 
if((a.indexOf('Salesforce')!=-1)&&(a.indexOf('iPhone')!=-1||a.indexOf('iPad')!=-1)&&(a.indexOf('OS/8')!=-1||a.indexOf('OS 8')!=-1)&&(a.indexOf('Safari')==-1)){ 
var s=document.createElement('style'); 
s.innerHTML="html,html body{overflow: auto;-webkit-overflow-scrolling:touch;}body{position:absolute;left:0;right:0;top:0;bottom:0;}"; 
document.getElementsByTagName('head')[0].appendChild(s);}}catch(e){}})(); 

その2

var ua=navigator.userAgent; 
if((ua.indexOf('Salesforce')!=-1)&&(ua.indexOf('iPhone')!=-1||ua.indexOf('iPad')!=-1)&&(ua.indexOf('OS/8')!=-1||ua.indexOf('OS 8')!=-1)&&(ua.indexOf('Safari')==-1)){ 
function IOS_SCROLL_BOOTSTRAP() { 
var children = Array.prototype.slice.call(document.body.children), 
placeholder = document.createElement('section'), 
fragment = document.createDocumentFragment(), 
styles, 
width, 
height; 
children.forEach(function(c){fragment.appendChild(c);}); 
placeholder.appendChild(fragment); 
styles = [ 
'width:100%;', 
'height:', (window.screen.height - 42), 'px;', 
'position: absolute; overflow: auto; -webkit-overflow-scrolling: touch' 
].join(''); 
placeholder.style.cssText = styles; 
document.body.appendChild(placeholder); 
} 
window.addEventListener('load', function (e) { 
IOS_SCROLL_BOOTSTRAP(); 
}); 
} 

その1はCSSを追加して、その2はセクションを丸ごと追加する形になるのでしょうか。

どちらもブラウザを取得していますが、最新のバージョンでないのでご注意ください。

ちなみに、その1はブラウザの判定を消しても動きました。

その2は試していません。

その1だけで実装し、それでも駄目なら、その2も追加する形で大丈夫そうです。

思ったのですが、SalesforceとiOSは相性がそんなに良くないのかもしれませんね。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です