2

Java に関する Safari でブロックされているアプリケーションとサイトのホワイトリストの追加を自動化しようとしています。バイナリ plist をエクスポートして bash 経由で編集することはできますが、検索して置換する方法、または特定の配置でファイルに追加する方法に行き詰まっています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>BookmarksSidebarWidth</key>
    <real>194</real>
        ...
    <key>WhitelistedBlockedPlugins</key>
    <array>
        <dict>
            <key>PluginHostname</key>
            <string>www.java.com</string>
            <key>PluginIdentifier</key>
            <string>com.oracle.java.JavaAppletPlugin</string>
            <key>PluginLastVisitedDate</key>
            <date>2013-06-05T17:03:26Z</date>
            <key>PluginName</key>
            <string>Java Applet Plug-in</string>
            <key>PluginPageURL</key>
            <string>http://www.java.com/en/download/testjava.jsp</string>
            <key>PluginPolicy</key>
            <string>PluginPolicyBlockWhenInsecure</string>
        </dict>
    </array>
    ...
    <key>com.apple.Safari.ContentPageGroupIdentifier.WebKit2UsesPageCache</key>
    <true/>
</dict>
</plist>

<key>WhitelistedBlockedPlugins</key>
<array>
    <dict>
        ....
        ....
    </dict>
</array>

存在しない場合は、検索して置換または追加したいビットです。存在する場合は、とにかくそこに何が起こっているのかを制御したいので<key>WhitelistedBlockedPlugins</key>、で始まりクロージングで終わるすべてを置き換えても問題ありません。</array>

存在しない場合は、ファイルの最後の final の直前に追加できると思い</dict>ます。

これは私が思いついたロジックですが、見つかった場合は置換し、見つからない場合は追加できる解決策を見つけるのに非常に苦労しています。

Stack Overflow で同様の投稿を読んだ後、いくつかのことを試しましたが成功しませんでした。XCode/CLI ツールに付属するものを含め、OSX にネイティブなものは何でも使用したいと考えています。

私が試したこと:

echoファイルへの挿入は機能しますが、前にそれを行う方法を見つけていません。対応する配列がどこにも見つからない</dict>場合にのみ、それを行いたいと思います。<key>WhitelistedBlockedPlugins</key>誰にもガイダンスや解決策がありますか? ありがとう

4

3 に答える 3

1

私は同じ問題に取り組みましたが、デフォルトを使用して com.apple.Safari.plist を変更することができました。

#!/bin/sh

# Get today's date
TODAY=$(/bin/date "+%FT%TZ")

# Determine OS version
osvers=$(sw_vers -productVersion | awk -F. '{print $2}')

# Server1's address
SERVER1=server1.name.here

# Server2's address
SERVER2=server2.name.here

# Get Java plug-in info
JAVA_PLUGIN=`/usr/bin/defaults read "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Info" CFBundleIdentifier`

# Check com.apple.Safari.plist for Server1 address
SERVER1_WHITELIST_CHECK=`/usr/bin/defaults read $HOME/Library/Preferences/com.apple.Safari WhitelistedBlockedPlugins | grep PluginHostname | awk '{print $3}' | grep $SERVER1 | tr -d '";'`

# Check com.apple.Safari.plist for Server2 address
SERVER2_WHITELIST_CHECK=`/usr/bin/defaults read $HOME/Library/Preferences/com.apple.Safari WhitelistedBlockedPlugins | grep PluginHostname | awk '{print $3}' | grep $SERVER2 | tr -d '";'`

if [[ ${osvers} -ge 6 ]]; then
  if [[ -n ${SERVER1_WHITELIST_CHECK} ]]; then

        # Server1 settings are present
    /usr/bin/logger "${SERVER1_WHITELIST_CHECK} is part of the Java whitelist in Safari. Nothing to do here."
    else        
    # Add Server1 to Java whitelist
        /usr/bin/defaults write $HOME/Library/Preferences/com.apple.Safari "WhitelistedBlockedPlugins" -array-add '{"PluginHostname" = "'$SERVER1'"; "PluginIdentifier" = "'$JAVA_PLUGIN'"; "PluginLastVisitedDate" = "'$TODAY'"; "PluginName" = "Java Applet Plug-in"; "PluginPageURL" = "https://'$SERVER1'"; "PluginPolicy" = "PluginPolicyNeverBlock";}'
        /usr/bin/logger "$SERVER1 has been added to the Java whitelist in Safari."
  fi

  if [[ -n ${SERVER2_WHITELIST_CHECK} ]]; then

    # Server2 settings are present
    /usr/bin/logger "${SERVER2_WHITELIST_CHECK} is part of the Java whitelist in Safari. Nothing to do here."
     else       
        # Add Server2 to Java whitelist
    /usr/bin/defaults write $HOME/Library/Preferences/com.apple.Safari "WhitelistedBlockedPlugins" -array-add '{"PluginHostname" = "'$SERVER2'"; "PluginIdentifier" = "'$JAVA_PLUGIN'"; "PluginLastVisitedDate" = "'$TODAY'"; "PluginName" = "Java Applet Plug-in"; "PluginPageURL" = "https://'$SERVER2'"; "PluginPolicy" = "PluginPolicyNeverBlock";}'
        /usr/bin/logger "$SERVER2 has been added to the Java whitelist in Safari."
  fi

fi

exit 0

このコードは、こちらの GitHub リポジトリでも入手できます。

于 2013-08-24T23:27:58.103 に答える