Bir uygulamayı zamanından önce etkinleştiren hizmetler hatası


2

Servislerle ilgili çok garip bir hata keşfettim.

Bu davranışa şahit olmak için lütfen aşağıdakileri yapın:

  • Safari'nin Dock'unuzda olduğundan emin olun.

  • Automator'ı açın. Yeni bir Servis oluşturun.

  • Hizmeti "herhangi bir uygulamada" giriş yok "alacak şekilde ayarlayın.

  • Bir "AppleScript Çalıştır" işlemi ekleyin.

  • Aşağıdakini eyleme yapıştırın:

    on run {input, parameters}
    
        delay 5
        display dialog "Hello"      
        tell application "Safari" to activate
    
        return input
    end run
    
  • Servisi kaydedin.

  • Servisi kapatın.

  • Hizmeti tekrar açın.

  • Automator, ““ ServiceName ”hizmetini yüklemek ister misiniz?” Sorusunu soran bir iletişim kutusu sunmalıdır. "Yükle" yi tıklayın.

  • "Kurulum tamamlandı" iletişim kutusu verildiğinde "Tamam" ı tıklayın.

Şimdi, Hizmeti çalıştırın. Bunu yapmak için, ekranın sol üst köşesindeki geçerli uygulama başlığına tıklayın (menü çubuğundaki ikinci öğe). Ardından Servis başlığına tıklayın.

Safari'nin hemen açılacağını göreceksiniz (Dock'taki logosunun altındaki siyah noktayla kanıtlandığı gibi). Safari 5 saniye gecikmeden önce ve "Merhaba" iletişim kutusu görüntülenmeden önce açılacaktır .

İfadeyi activatebir alt rutine yerleştirmek sorunu çözmez.

Birisi bunun bir hata olduğunu onaylayabilir mi? Bunun Servisler özelliğiyle ilgili bir hata olduğuna ikna oldum, çünkü Servisi Automator içinden çalıştırdığınızda (Automator penceresinin sağ üst köşesindeki "oynat" düğmesini tıklatarak) kod doğru çalışıyor.

Bu bir hataysa, önceki kod çalıştırılmadan önce uygulamanın aslında açılmaması için geçici bir çözümü olan var mı?


Macbook Pro'um OS X El Capitan, 10.11.6 kullanıyor.


Hata, farkettiğim başka garip davranışlarla ilişkili olabilir:

  • Çalışıyorlarsa, Safari.app ve Automator.app'den çıkın.

  • Bilgisayarın Servislerinin bulunduğu klasörü (/ Kullanıcılar / Me / Kütüphane / Servisler /) Finder'da yukarı çekin.

  • Servis dosyasına sağ tıklayın ve dosyayı Automator ile açın.

.Workflow dosyasını Automator ile açmanın Safari'yi etkinleştireceğini fark edeceksiniz. Bunu yapmamalıydı.


OS X El Capitan 10.11.6 altında tanımladığınız sorunları çoğaltabilirim.
user3439894

@ User3439894'ü kontrol ettiğiniz için teşekkür ederiz! Herhangi bir geçici çözüm düşünebiliyor musunuz?
rubik'in küresi

Birkaç farklı senaryoyu test ettikten sonra bulduğum tek geçici çözüm, Safari komutlarını bir do shell scriptkomut içerisine sarmak , örn do shell script "osascript -e 'tell application \"Safari\" to activate'". osascriptÇok satırlı bir komut dosyası oluşturmak için birden fazla seçenek verilebileceğini unutmayın .
user3439894

Bu harika çalışıyor! Bunu cevap olarak gönderirseniz kabul edeceğim. Ayrıca, sakıncası yoksa, o son cümleyi biraz uzatabilir misin? Ne anlama geldiğini gerçekten anlamıyorum.
rubik küresi

Yalnızca içeren bir AppleScript derlemesinin tell application "Whatever" to ...bu uygulamayı etkinleştireceğini fark ettim . Muhtemelen altında yatan sebep budur.
BallpointBen

Yanıtlar:


2

Birkaç farklı senaryoyu test ettikten sonra bulduğum tek geçici çözüm, Safari komutlarını bir do shell script komut içerisine sarmak , örn do shell script "osascript -e 'tell application \"Safari\" to activate'". Çok satırlı bir komut dosyası oluşturmak için osascriptbirden fazla −e seçenek verilebileceğini unutmayın .

Manuel sayfadan osascript:

Statemente deyimi

Bir betiğin bir satırını girin. Eğer -e verilir, osascript argüman listesinde bir dosya adı aramaz. Birden -e seçenekleri çok hatlı senaryoyu oluşturmak için verilebilir. Komut dosyalarının çoğu, birçok kabuk programına özel karakterler kullandığından (örneğin, AppleScript tek ve çift tırnak işaretleri, “(”, “)” ve “*” kullanır), ifadenin doğru şekilde alıntılanması ve kaçılması gerekir. Kabuğu sağlam geçmiş.

Örnek AppleScript kodu :

tell application "Safari"
    activate
    make new document in front
    set URL of front document to "http://apple.stackexchange.com/questions/271133/services-bug-that-prematurely-activates-an-application"
end tell

AppleScript bir örneği kod yukarıda bir şekilde yazılı do shell script komutla kullanarak osascriptile -e seçeneği gerektiği gibi.

do shell script "osascript -e 'tell application \"Safari\"' -e 'activate' -e 'make new document in front' -e 'set URL of front document to \"http://apple.stackexchange.com/questions/271133/services-bug-that-prematurely-activates-an-application\"' -e 'end tell'"

Gördüğünüz gibi, AppleScript her satırı kodu normal tell blok deyimi kendi olan -e seçeneği ve kılavuz sayfasına belirtildiği gibi osascriptolan -e seçeneği için, ters eğik çizgi kaçan gerekli yapılmıştır kod için derlemek çalıştırılan önce doğru .

Başka bir deyişle, bu normal tell blok ifadesini ve içerdiği komutları OP'de sunulan kullanım senaryosunda görünen hatayı aşmak için tek satırlık bir do shell script komuta çevirir.

Gerektiğinde uygun uygulama adını (ve komutlarını ) kullanarak , aynı hatanın tetiklediği diğer uygulamalarla benzer şeyler yapabileceğinizi unutmayın .


1
Bir örnek verdiğiniz ve açıkladığınız için teşekkür ederiz! Şimdi kavramı anlıyorum.
rubik'in küresi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.