ただの備忘記録

忘れないように記録を残します。忘れるから記録に残してます。そして、その記録が役立つといいかな。

iPadOSになって最初のトラブル ブラウザの識別情報が変わってしまった

2019年09月27日 | MacOS/iOS

JavaScriptやperlによるブラウザの解析を続けて来ましたが、iPadのOSがiOSからiPadOSになったことでブラウザの動作に変化がありました。

9月20日にiPhoneはiOS12から13になり、9月25日にiPadはiOS12からiPadOS13.1(iPadOS13はありません)にアップデートしました。
アップデートの後、iPadのSafariでアクセスするといままでと違った表示をしたり、動画が再生されないというサイトがありました。
これはiPadを他のOSや機器として識別されているのではと思い、Safariの解析情報を確認してみました。

JavaScriptを使って、iOS12とiPadOS13.1でSafariから取得したnavigator.platformとnavigator.userAgentの値は以下の通りです。また比較のためにMacOSXのSafariの解析データも載せておきます。

OS.platform.userAgent
iOS12  iPad  Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1
iPadOS13.1  MacIntel  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15
MacOSX  MacIntel  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15

 iOS12とiPadOS13.1では、大きく内容が変わっており、platformも明らかにiPadではなく、MacIntelとなっています。
MacOSXのSafariによる解析情報と比較すると、今回のiPadOSでの解析情報とほぼ同じになっており、これが間違った識別が発生している原因です。

サイト側は、ユーザーがブラウザを使ってアクセスをすると、そのクライアントの情報を解析してどんなOSなのか、どんなブラウザなのかを判別しようとします。
スマホ、タブレット、PCの違いが分かるだけでも、画面のサイズやタッチ操作への対応ができます。
また、機器によって表示できる画像や動画のデータ形式に違いがあると、提供するデータ形式を切り替えて対応することもあります。

JavaScriptでは、スクリプトの命令や関数の動作の違いで判定することもありますが、上記のように解析情報も使われています。
また、サーバ側で解析する場合、ブラウザの解析情報に頼ることになりますので、大きな影響があと思われます。

各ブラウザのブラウザ情報については以下のページにまとめて記録を残しています。参考にどうぞ。

http://www.shurey.com/js/labo/browser.html

【原因と対処】

元々Safariには表示しているページをデスクトップ用(PC用)に表示をするという機能がありました。
どうやらその機能がiPadOSになったタイミングでオンになったのだと思われます。

設定の場所は「設定」内の「Safari」の中にありました。

上記画面の「デスクトップ用Webサイトを表示」をタップすると切り替えスイッチが表示されてオン/オフの切り替えが出来ました。
この設定をオフにすると、navigator.platformも「iPad」となり、userAgentもiOS12の時と同じようになりました。
以下の表は、iOS12とiPadOS13.1との比較です。

OS.platform.userAgent
iOS12  iPad  Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1
iPadOS13.1  iPad  Mozilla/5.0 (iPad; CPU OS 13_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Mobile/15E148 Safari/604.1

 


【JSX】Photoshopのスクリプトで気付いたこと

2019年09月18日 | JavaScript

業務でWindowsのPhotoshopでスクリプトを作成して使用しています。

検索しても直接的な解決策がなかったため自己対応していますが、解決できないこともあるため情報共有のため記録しておきます。

①フォルダに入っているPSDファイルを取得する

ファイルを取得したときに実際のファイル数と取得したファイル数が異なる事態が発生しました。
以下、フォルダを選択肢、PSDファイルを取得して処理をするというスクリプトの一部です。


//ファイルダイアログを開く
folderObj = Folder.selectDialog("フォルダを選択してください。");
	if (folderObj) {
		//ファイルを取得
		fileList = folderObj.getFiles("*.psd");
		・・・
	}

ファイルを取得した後の処理中にエラーが出たので、ファイル取得時のfileList.lengthを調べてみると、フォルダに入っているファイルより値が多くなっていました。
fileList.nameを1つ1つ調べると、ファイル名の頭に「._」があるファイルが入っていることが分かりました。
それらは隠しファイルでした。表示の設定で隠しファイルをオンにすると下の様に確認することができました。

調べて見ると、ファイル名の頭に「._」と付いている隠しファイルは、Macで作業したときにできるファイルのようです。

下記のようにファイル名を除去するスクリプトを付け加えることで問題は解決できました。


//ファイルダイアログを開く
folderObj = Folder.selectDialog("フォルダを選択してください。");
	if (folderObj) {
		//ファイルを取得
		fileList = folderObj.getFiles("*.psd");

		//特定のファイル名を除去
		for (n=fileList.length; n>0; n--) {
			if (fileList[n-1].name.indexOf("._") == 0) {
				fileList.splice(n-1,1);
			}
		}
	}

②フォルダ名、ファイル名に「&」や「'」がある場合

こちらは完全には未解決です。

使用しているスクリプトは、指定のフォルダ内にあるファイルに対し任意の処理をして、別のフォルダに保存するというものです。
スクリプトを実行すると最初にダイアログを表示して、データの処理方法を選択します。そのダイアログの中にフォルダ名やファイル名の表示箇所があります。
下の図はファイルの入ったフォルダの内容です。

下図は、上記フォルダをスクリプトで選択し、ダイアログにフォルダ名とファイル名を表示しています。
フォルダが「HY」に、開始ファイル名が「HY01.psd」、終了ファイル名が「HY04.psd」と表示されており、元のフォルダ名やファイル名と比べると「&」が消えてしまっています。

以下、ダイアログを生成するスクリプトの一部です。


//フォルダ名をデコード
pathName = decodeURIComponent(folderObj.name);
//ファイル名をデコード
stFile = decodeURIComponent(fileList[stPage-1].name);
edFile = decodeURIComponent(fileList[edPage-1].name);

//ダイアログ
function createDialog(){
	var rs = "dialog { text:'PSD一括ファイル変換処理', bounds:[0, 0, 280, 330], ";
    
	rs += " pnl1: Panel { text:'フォルダ情報', bounds:[15, 10, 260, 130], ";
	rs += " str: StaticText { text:'フォルダ:', bounds:[10, 20, 90, 40],  }, ";
	//フォルダ名表示
	rs += " str: StaticText { text:'" + pathName + "', bounds:[60, 20, 240, 40],  }, ";
	rs += " str: StaticText { text:'開始:', bounds:[20, 50, 90, 70],  }, ";
	rs += " start_page: EditText { bounds:[60, 50, 100, 70],  }, ";
	//ファイル名表示
	rs += " start_file: StaticText { text:'" + stFile + "', bounds:[110, 50, 240, 70],  }, ";
	rs += " str: StaticText { text:'終了:', bounds:[20, 80, 90, 100],  }, ";
	rs += " end_page: EditText { bounds:[60, 80, 100, 100],  }, "; //textfiled
	//ファイル名表示
	rs += " end_file: StaticText { text:'" + edFile + "', bounds:[110, 80, 240, 100],  }, ";
	rs += " }," ;
	・・・
	rs += " cancel: Button { text:'キャンセル', bounds:[50, 290, 120, 320],  }, ";
	rs += " running: Button { text:'実行', bounds:[160, 290, 230, 320],  }, ";
	rs += " }";

	var dlg = new Window(rs);
	dlg.center();
	return dlg;
}

変数pathNmaeやstFile、edFileにはデコードされたパス名、ファイル名が入っています。
フォルダやファイルを作成する処理には問題がないため、ダイアログへ文字列として出力する段階で問題が発生していると考えられます。

変数rsにダイアログのデザイン的な情報を含めて、文字列で記述しています。

半角文字の「&」は表示されません。(このブログも半角のアンパサンドが使えないため全角で表示しています)
HTMLの表示のルールでも&を文字列で使用するには、コード表記の&に置き換えるようにと定められています。
「&」や「%26」「\&」などに置き換えてみましたが、&以外の文字列がそのまま表示されるだけでした。
現時点では全角文字の「&」を使用しています。

以下はフォルダ名「H&Y's」を表示した場合のテストで、文字を置き換えたパターン例です。「'」は全角で置き換えて表示しています。

&&
%26 &(全角) 

半角文字の「'」については、ダイアログを文字列(変数rs)で作成しているため、文字列の区切りとして認識されてダイアログを表示する前にエラーで止まります。
「'」「\'」の置き換えは失敗しています。
こちらも全角文字「’」で対応しています。

「"」はそもそもWindowsのファイル名には使えないため対処はしていません。

ダイアログの生成方法はこちらで公開されているファイルを参考にしました。
http://dearps.lovwar.com/2011/09/15/shape-3/

解決策をご存じの方の情報をお待ちしております。


【映画】ヴァイオレット・エヴァーガーデン外伝

2019年09月16日 | 映画

「ヴァイオレット・エヴァーガーデン外伝~永遠と自動手記人形」を上野のTOHOシネマズ上野で見てきました。

http://www.violet-evergarden.jp/sidestory/

ヴァイオレットの境遇などはあまり語られなかったので、TV本編からの流れで見ないと分からない部分があるかも知れません。
この外伝は、孤児の姉妹が主人公と言ってもいいかもしれません。二人は突然現れた大人によって生き別れとなります。
そして、籠の中の鳥となった姉は、寄宿学校で社交デビューのための教育を受けており、その教育係として送られてきたのがヴァイオレットです。

手紙を書くのがヴァイオレットの仕事のはずですが、今回は社交ダンスを教えています。同居生活を通じて友情を深める二人。それは、お互いにとっても初めての友達だったのかも知れません。
光や風を感じる美しい背景はもちろんですが、キャラクター達の細やかな動きも鮮やかでした。
舞踏会のヴァイオレット格好良かったです。男装っていうのがまた良かったですね。映画のパンフレットの表にもそのシーンが描かれています。
最後の手紙を受け取るシーン、そのメッセージに返事を呟くところで涙がこぼれそうでした。


【映画】記憶にございません!

2019年09月14日 | 映画

いつも面白い三谷幸喜監督作品だったので朝一の上映を観に行ってきました。

https://kiokunashi-movie.jp/

口が悪く権力志向が強く、史上最低の総理と言われている男が石をぶつけられ記憶を失います。
記憶をなくしたまま総理官邸に連れ戻され、総理を続けることになります。
事実を知っているのは秘書たち3人のみ。彼らの協力の下、閣内の問題、家庭の問題を解決していきます。

いつものコメディですが、群像劇のドタバタではなく、1つ1つの問題を着実に解決していきます。
前半は記憶を失って初めてのできごとにアタフタしていますが、それらが後半への前振りにもなっていました。
大きなどんでん返しもなく、分かりやすい展開になっています。

俳優陣の演技をじっくり堪能できる映画です。
小池栄子の怪演も期待していましたが、今回はとても真面目だけどコミカルな動きで安心して見ていられました。
中井貴一の表情も良いですね。驚いたり悲しんだり、権力に立ち向かう本気の顔などどれも自然な感じでした。

映画だとみんな静かに見えていることが多いですが、この映画は見ている方はリラックスして自然と笑いがこみ上げてきます。
後半はみんなの笑い声が同時に湧き起こっていました。
エンディングの佐藤浩市はあれでよかったのでしょうか?面白いですけどね・・・