Safari 10.1.2 , javascript内の変数に代入した値が実行結果として戻らない。

tell application "Safari"

do JavaScript "var a = 1.0;

true" in document 1

end tell


上記applescriptをSafari10.1以前で実行した場合は、

javascript内の変数aに代入した値が実行結果として戻ってきていたのですが、

10.1.2では、ループ状態になりタイムアウトしてしまいます。


これと同様のスクリプトを業務で多用しているため大変困っています。

解決策などご存知の方がおられましたらお知らせいただければ幸いです。



* タイトルを変更しました。 Apple Inc.

投稿日 2017/08/25 20:29

返信
返信: 32

2017/08/25 22:02 ババイソン への返信

ご説明を頂きまして、有難うございます。 他には、変数(a?)が、Web Pageのソースコードで使われている変数と被っているのかもしれないです。  変数の文字を変えて試してみても良さそうです。 また、Safari.appのキャッシュをクリアすることも試せそうです。 一般に公開されているWeb Pageであれば、URLを教えていただけると、こちらでも試すことができそうです。

2017/08/26 01:09 T22T への返信

T22T様 javascript側から値をapplescriptに戻そうとすると必ず発生するところを見ると、 OSのセキュリティ周辺の要因も絡んでいそうな感じです。 しばらくはSafariのバージョンを下げる方法の調査や、OSの再インストールなど 間接的に対応していこうと思います。 たくさんご検証いただきありがとうございました。

2017/08/26 01:19 ババイソン への返信

El Capitan(セキュリティーアップデート2017-003適用済み)上のSafari 10.1.2ではループに陥ることはありませんでした。

可能なら、復元モードで空いてる領域(検証ようなので何でもいいかも)にYosemiteのクリーンインストールで再現されるかどうかの確認を。 業務で使うなら検証用にクリーンなOSがあるといいのでは?

2017/08/27 22:00 ババイソン への返信

どうも、Yosemite環境でのアップデート絡みの問題のような気が…

他のユーザーでも症状が起こるようですので、古いバージョンに戻せればその方が早いような。

または、改善要求をだして対策されるのを待つかですが、タイミング的にどうかと。

次期OSのリリースが近いようですので。 El Capitanにアップグレードできれば解消する問題と思いますが、使用者側の準備もあることなので。

2017/08/27 22:38 Hiro__S への返信

Hiro.S様 たくさんの情報ありがとうございます。 早速Google Chromeで確認しましたが エラーになることなく変数aの値が返ってきました。 たた、ブラウザの変更については過去に作成したスクリプトを 複数修正する必要があるため現状困難な状態なのです。 function() 文を使用する変数汚染対策、とても参考になりました。 今後javascriptを作成する際は気をつけようと思います。

2017/08/28 03:00 T22T への返信

T22T様 有難うございます。 toString();メソッドの記述はスマートですね。コードの文字列置換もシンプルにできそうで、asで戻せば後に続く記述にも影響出ませんし。 参考にさせていただきます。 ひとまず戻り値を数値以外で通過させれば良いとわかったのでなんとかなりそうです。 ただ、数値だとダメな根本的な理由をAppleに教えてもらいたいです。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Safari 10.1.2 , javascript内の変数に代入した値が実行結果として戻らない。

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。