335
ADOBE ® FLASH ® CS4 PROFESSIONAL ile ADOBE AIR 1.1 uygulamalari geliştirme

FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1 · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

Embed Size (px)

Citation preview

Page 1: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

ADOBE® FLASH® CS4 PROFESSIONALileADOBE AIR 1.1 uygulamalari geliştirme

Page 2: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

Telif Hakkı© 2008 Adobe Systems Incorporated. Tüm hakları saklıdır.

Adobe® Flash® CS4 Professional ile Adobe® AIR™ 1.1 Uygulamaları Geliştirme

Bu kılavuz son kullanıcı sözleşmesini içeren bir yazılımla birlikte verilmişse bu kılavuz ve onda anlatılan yazılım lisanslıdır ve yalnızca bu lisansa uygun şekilde

kullanılabilir veya kopyalanabilir. Bu türde bir lisans tarafından izin verildiği durumlar dışında, bu kılavuzun hiçbir bölümü Adobe Systems Incorporated

şirketinden önceden yazılı izin alınmadan çoğaltılamaz, geri alma sistemlerinde depolanamaz veya elektronik, mekanik, kayıt yoluyla veya diğer herhangi bir

şekilde veya herhangi bir yöntemle aktarılamaz. Bu kılavuz son kullanıcı lisans sözleşmesi içermeyen bir yazılımla dağıtılmamış olsa bile bu kılavuzdaki içeriğin

telif hakkı yasalarıyla korunduğunu unutmayın.

Bu kılavuzun içeriği yalnızca bilgi amaçlıdır, önceden haber verilmeden değiştirilebilir ve Adobe Systems Incorporated şirketinin bir taahhüdü olarak

yorumlanmamalıdır. Adobe Systems Incorporated bu kılavuzdaki bilgilerin hatalı veya yanlış olması durumunda hiçbir sorumluluk veya yükümlülük kabul

etmez.

Projenize dahil etmek isteyebileceğiniz mevcut resimlerin ve görüntülerin telif hakkı yasalarıyla korunuyor olabileceğini unutmayın. Bu türde malzemenin yeni

çalışmanıza yetkisiz olarak katılması, telif hakkı sahibinin haklarını ihlal etmek anlamına gelebilir. Lütfen telif hakkı sahibinden gerekli tüm izinleri aldığınızdan

emin olun.

Örnek şablonlarda şirket veya şahıs adlarına yapılmış olan göndermeler yalnızca anlatım amacıyla olup gerçek kuruluş veya şahıslarla bir ilgisi yoktur.

Adobe, the Adobe logo, Acrobat, ActionScript, Adobe AIR, ColdFusion, Dreamweaver, Flash, Flex, Flex Builder, and Reader are either registered trademarks or

trademarks of Adobe Systems Incorporated in the United States and/or other countries.

Microsoft and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Apple, Macintosh,

and Mac OS are trademarks of Apple Inc., registered in the United States and other countries. Java is a trademark or registered trademark of Sun Microsystems,

Inc. in the United States and other countries. All other trademarks are the property of their respective owners.

This product includes software developed by the Apache Software Foundation (http://www.apache.org/)

MPEG Layer-3 audio compression technology licensed by Fraunhofer IIS and Thomson Multimedia (http://www.mp3licensing.com).

Speech compression and decompression technology licensed from Nellymoser, Inc. (www.nellymoser.com)

Video compression and decompression is powered by On2 TrueMotion video technology. © 1992-2005 On2 Technologies, Inc. All Rights Reserved.

http://www.on2.com.

This product includes software developed by the OpenSymphony Group (http://www.opensymphony.com/)

This product contains either BSAFE and/or TIPEM software by RSA Security, Inc.

Sorenson Spark™ video compression and decompression technology licensed from Sorenson Media, Inc.

Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA.

Notice to U.S. Government End Users. The Software and Documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of

“Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202,

as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and

Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights

as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States.

Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all applicable

equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment

Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60,

60-250, and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference.

Page 3: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

iii

İçindekiler

Bölüm 1: Adobe AIR yüklemesi

Adobe AIR için Sistem Gereksinimleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Adobe AIR'i yükleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Adobe AIR'i kaldırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

AIR örnek uygulamalarını yükleme ve çalıştırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Bölüm 2: Flash CS3 için Adobe AIR Güncellemesi'ni ayarlama

Flash CS3 için Adobe AIR Güncellemesi'ne yönelik sistem gereksinimleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Flash CS3 için Adobe AIR güncellemesini kaldırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Flash için Adobe AIR güncellemesi yükleme CS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Flash CS3 uygulamasına yönelik Adobe AIR eklemeleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Bölüm 3: Adobe AIR'e Giriş

Bölüm 4: AIR Kaynaklarını bulma

Bölüm 5: Flash CS3 veya CS4'te ilk AIR uygulamanızı oluşturma

Flash içinde Hello World uygulamasını oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Uygulamayı test etme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Bir Flash uygulamasını Adobe AIR uygulamasına çevirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Bölüm 6: Flash CS3 Professional için Adobe AIR Güncellemesi

Bir Adobe AIR dosyası oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Adobe AIR yayınlama ayarlarını belirleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Bir Adobe AIR uygulamasının önizlemesini görüntüleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Bir Adobe AIR uygulamasının hatalarını ayıklama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

AIR uygulaması ve yükleme dosyaları oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Özel bir uygulama tanımlayıcı dosyası oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Uygulamanızı imzalama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Bölüm 7: AIR güvenliği

AIR güvenlik temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Yükleme ve güncellemeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Sanal alanlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

HTML güvenliği . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Diske yazma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Güvenilmeyen içerikle güvenli biçimde çalışma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Geliştiriciler için en iyi güvenlik uygulamaları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Kod imzalama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Bölüm 8: AIR uygulamasının özelliklerini ayarlama

Uygulama tanımlayıcı dosyasının yapısı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Uygulama tanımlayıcı dosyasında özellikleri tanımlama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Page 4: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

ivADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

İçindekiler

Bölüm 9: Adobe AIR uygulamasındaki yeni işlevler

Yeni runtime sınıfları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Yeni işlevlere sahip runtime sınıfları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Hizmet izleme çerçevesi sınıfları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Bölüm 10: Yerel pencerelerle çalışma

Yerel pencereler hakkında ek çevrimiçi bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

AIR penceresi temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Pencereler oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Pencereleri yönetme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Pencere olaylarını dinleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Tam ekran pencereleri görüntüleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

Bölüm 11: Ekranlar

Ekranlar hakkında ek çevrimiçi bilgi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Ekran temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Ekranları numaralandırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Bölüm 12: Yerel menülerle çalışma

Yerel menüler hakkında ek çevrimiçi bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

AIR menüsü temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Yerel menüler oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Bağlam menüleri hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

HTML'deki bağlam menüleri hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

Yerel menüleri tanıtıcı biçimde tanımlama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

Açılır menüleri görüntüleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Menü olaylarını işleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Örnek: Pencere ve uygulama menüsü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Bölüm 13: Görev çubuğu simgeleri

Görev çubuğu simgeleri hakkında ek çevrimiçi bilgi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Görev çubuğu simgeleri hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Dock simgeleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Sistem Tepsisi simgeleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Pencere görev çubuğu simge ve düğmeleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Bölüm 14: Dosya sistemiyle çalışma

AIR Dosya API'si hakkında ek çevrimiçi bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

AIR dosyası temel bilgileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

File nesneleriyle çalışma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Dosya sistemi bilgilerini alma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Dizinlerle çalışma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Dosyalarla çalışma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Dosyaları okuma ve dosyalara yazma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Bölüm 15: Sürükle ve bırak

Sürükleme ve bırakma hakkında ek çevrimiçi bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

Sürükleme ve bırakma temel bilgileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

Page 5: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

vADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

İçindekiler

Dışarı sürükleme hareketini destekleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

İçeri sürükleme hareketini destekleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

HTML Sürükle ve bırak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Bölüm 16: Kopyalama ve yapıştırma

Kopyalama ve yapıştırma hakkında ek çevrimiçi bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Kopyalama ve yapıştırma temel bilgileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Sistem panosundan okuma ve sistem panosuna yazma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

HTML kopyala ve yapıştır . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Kopyalama ve yapıştırma için menü komutları ve tuş girişleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Pano veri formatları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Bölüm 17: Bayt dizileriyle çalışma

ByteArray okuma ve yazma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

ByteArray örneği: Bir .zip dosyasını okuma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Bölüm 18: Yerel SQL veritabanlarıyla çalışma

Yerel SQL veritabanları hakkında ek çevrimiçi bilgi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Yerel SQL veritabanları hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Veritabanı oluşturma ve değiştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

SQL veritabanı verilerini değiştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

SQL veritabanlarıyla çalışmak için stratejiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Bölüm 19: Şifreli verileri saklama

Bölüm 20: HTML ortamı hakkında

HTML ortamına genel bakış . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

AIR ve Webkit uzantıları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

Bölüm 21: HTML ve JavaScript'te programlama

HTMLLoader sınıfı hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

Güvenlik ilişkili JavaScript hatalarını önleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

AIR API sınıflarına JavaScript'ten erişme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

AIR'deki URL'ler hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

ActionScript nesnelerini JavaScript için kullanılabilir duruma getirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

HTML DOM ve JavaScript nesnelerine ActionScript'ten erişme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

SWF içeriğini HTML'e gömme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

HTML sayfasında ActionScript kitaplıkları kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

Date ve RegExp nesnelerini dönüştürme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

HTML stil sayfasını ActionScript'ten değiştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

Bölüm 22: HTML ile ilgili olayları işleme

HTMLLoader olayları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

DOM olaylarını ActionScript ile işleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Yakalanmayan JavaScript istisnalarına yanıt verme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

Çalışma zamanı olaylarını JavaScript'le işleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Page 6: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

viADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

İçindekiler

Bölüm 23: HTML Kabı için Komut Dosyası Oluşturma

HTMLLoader nesnelerinin görüntü özellikleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

HTML içeriğini kaydırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

HTML geçmiş listesine erişme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

HTML içeriği yüklenirken kullanılan kullanıcı aracısını ayarlama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

HTML içeriğinde kullanım için karakter kodlamasını ayarlama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

HTML içeriği için tarayıcı benzeri kullanıcı arabirimleri tanımlama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

HTMLLoader sınıfının alt sınıflarını oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Bölüm 24: PDF içeriği ekleme

PDF Özelliklerini Saptama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

PDF içeriğini yükleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Komut dosyası PDF içeriği . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

AIR'de PDF içeriği için bilinen sınırlamalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

Bölüm 25: Dijital haklar yönetimini kullanma

Dijital haklar yönetimiyle ilgili ek çevrimiçi bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

Şifreli FLV iş akışını anlama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

NetStream sınıfında değişiklikler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

DRMStatusEvent sınıfını kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

DRMAuthenticateEvent sınıfını kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

DRMErrorEvent sınıfını kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

Bölüm 26: Uygulama başlatma ve uygulamadan çıkma seçenekleri

Uygulama başlatma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Komut satırı argümanlarını yakalama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

Oturum açılırken başlatma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Tarayıcı başlatma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Uygulama sonlandırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Bölüm 27: Uygulama ayarlarını okuma

Uygulama tanımlayıcı dosyasını okuma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Uygulama ve yayıncı kimliklerini getirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Bölüm 28: Çalışma zamanı ve işletim sistemi bilgileriyle çalışma

Dosya ilişkilendirmelerini yönetme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Çalıştırma zamanı sürümü ve yama düzeyini getirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

AIR özelliklerini saptama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Kullanıcı varlığını izleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Bölüm 29: Ağ bağlantısını izleme

Ağ bağlantısı değişikliklerini saptama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Servis izleme temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

HTTP bağlantısını saptama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Soket bağlantısını saptama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Page 7: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

viiADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

İçindekiler

Bölüm 30: URL istekleri ve ağ iletişimi

URLRequest sınıfını kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

URLStream sınıfındaki değişiklikler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Varsayılan sistem web tarayıcısında bir URL açma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Bölüm 31: AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR uygulamasını masaüstünden yükleme ve çalıştırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

AIR uygulamalarını web sayfasından yükleme ve çalıştırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Kuruluş konuşlandırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

AIR dosyasını dijital olarak imzalama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

Bölüm 32: AIR uygulamalarını güncelleme

Uygulamaları güncelleme hakkında . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Özel uygulama güncelleme kullanıcı arabirimini sunma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Kullanıcının bilgisayarına bir AIR dosyası indirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Uygulamanın ilk kez çalışıp çalışmadığını görmek için kontrol edin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Bölüm 33: AIR uygulamalarını yerelleştirme

Yerelleştirmeye giriş . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Uygulama yükleyicisindeki uygulama adını ve açıklamasını yerelleştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Bir yerel ayar seçme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Flaş içeriğini yerelleştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

HTML içeriğini yerelleştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Tarihleri, saatleri ve para birimlerini yerelleştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Bölüm 34: Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

AIR Hata Ayıklama Başlatıcısı'nı (ADL) Kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

AIR yükleme dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

Uygulama sertifikasını değiştirmek için AIR dosyasını imzalama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

ADT ile kendinden imzalı bir sertifika oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

Apache Ant aracını SDK araçlarıyla kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

Dizin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Page 8: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

1

Bölüm 1: Adobe AIR yüklemesi

Adobe® AIR™ sayesinde AIR uygulamalarını masaüstünde çalıştırabilirsiniz. Çalışma zamanını şu şekillerde

yükleyebilirsiniz:

• Çalışma zamanını ayrı yükleyerek (bir AIR uygulaması da yüklemeden)

• İlk kez bir AIR uygulaması yükleyerek (ayrıca çalışma zamanını da yüklemeniz istenir)

• AIR SDK, Adobe® Flex™ Builder™ 3 veya Adobe Flex™ 3 SDK gibi (AIR komut satırı geliştirme araçlarını içeren) bir

AIR geliştirme ortamı kurarak

Çalışma zamanının her bilgisayarda yalnızca bir kere yüklenmesi gerekir.

Adobe AIR için Sistem Gereksinimleri

Adobe AIR uygulamasını çalıştırmak için sistem gereksinimleri şunlardır:

• Temel Adobe AIR uygulamaları için:

• Donanım ölçeklemeyle tam ekran video kullanan Adobe AIR uygulamaları için:

Windows Macintosh

İşlemci Intel® Pentium® 1.0 GHz veya daha hızlı bir

işlemci

PowerPC® G3 1.0 GHz veya daha hızlı bir işlemci

ya da

Intel Core™ Duo 1.83 GHz veya daha hızlı bir

işlemci

Bellek 256 MB RAM 256 MB RAM

OS Windows 2000 Service Pack 4;

Windows XP SP2;

Vista

Mac OS X 10.4.10 veya 10.5.x (PowerPC);

Mac OS X 10.4.x veya 10.5.x (Intel)

Windows Macintosh

İşlemci Intel® Pentium® 2.0 GHz veya daha hızlı bir

işlemci

PowerPC® G4 1.8GHz GHz veya daha hızlı bir

işlemci ya da

Intel Core™ Duo 1.33GHz veya daha hızlı bir

işlemci

Bellek 512 MB RAM; 32 MB video RAM 256 MB RAM; 32 MB video RAM

OS Windows 2000 Service Pack 4;

Windows XP SP2;

Vista

Mac OS X v.10.4.10 veya v.10.5 (Intel veya

PowerPC)

NOT: H.264 videoyu görüntülemek için

kullanılan codec, Intel işlemci kullanılmasını

gerektirir

Page 9: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

2ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Adobe AIR yüklemesi

Adobe AIR'i yükleme

AIR'in Windows® ve Mac OS X sürümlerini indirmek ve yüklemek için aşağıdaki talimatları kullanın.

Bir kullanıcı çalışma zamanını güncellemek için bilgisayarda yönetimsel ayrıcalıklara sahip olmalıdır.

Çalışma zamanını Windows kurulu bir bilgisayara yükleme

1 çalışma zamanı kurulum dosyasını indirin.

2 Çalışma zamanı yükleme dosyasını çift tıklatın.

3 Yüklemeyi tamamlamak için yükleme penceresindeki istemleri izleyin.

Çalışma zamanını Mac kurulu bir bilgisayara yükleme

1 çalışma zamanı kurulum dosyasını indirin.

2 Çalışma zamanı yükleme dosyasını çift tıklatın.

3 Yüklemeyi tamamlamak için yükleme penceresindeki istemleri izleyin.

4 Yükleyici bir Kimlik Denetimi penceresi görüntülerse, Mac OS kullanıcı adınızı ve parolanızı girin.

Adobe AIR'i kaldırma

Çalışma zamanını yükledikten sonra, aşağıdaki yordamları kullanarak kaldırabilirsiniz.

Çalışma zamanını Windows kurulu bir bilgisayardan kaldırma

1 Windows Başlat menüsünde, Ayarlar > Denetim Masası öğelerini seçin.

2 Program Ekle veya Kaldır denetim masasını seçin.

3 Çalışma zamanını kaldırmak için “Adobe AIR”i seçin.

4 Değiştir/Kaldır düğmesini tıklatın.

Çalışma zamanını Mac kurulu bir bilgisayardan kaldırma

• /Applications klasöründe bulunan “Adobe AIR Uninstaller”ı çift tıklatın.

AIR örnek uygulamalarını yükleme ve çalıştırma

AIR özellikleri gösteren bazı örnek uygulamalar mevcuttur. Aşağıdaki talimatları kullanarak onlara erişebilir ve onları

yükleyebilirsiniz:

1 AIR örnek uygulamalarını indirin ve çalıştırın. Kaynak kodun yanı sıra derlenen uygulamalar da kullanılabilir.

2 Örnek bir uygulamayı indirmek ve çalıştırmak için, örnek uygulamanın Şimdi Yükle düğmesini tıklatın.

Uygulamayı yüklemeniz ve çalıştırmanız istenir.

Page 10: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

3ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Adobe AIR yüklemesi

3 Örnek uygulamaları indirmeyi ve sonra çalıştırmayı seçerseniz, indirme linklerini seçin. AIR uygulamalarını

istediğiniz zaman şu şekillerde çalıştırabilirsiniz:

• Windows'ta masaüstündeki uygulama simgesini çift tıklatarak veya Windows Başlat menüsünden seçerek.

• Mac OS'de varsayılan olarak kullanıcı dizininizin Uygulamalar klasöründe yüklü olan uygulama simgesini çift

tıklatarak (örneğin Macintosh'ta HD/Users/JoeUser/Applications/).

Not: Bu talimatların güncellemeleri için, şu adreste bulunan AIR sürüm notlarını kontrol edin:

http://www.adobe.com/go/learn_air_relnotes.

Page 11: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

4

Bölüm 2: Flash CS3 için Adobe AIR Güncellemesi'ni ayarlama

Adobe® Flash® CS3 Professional için Adobe® AIR™ Güncellemesi, Flash ile AIR uygulamaları geliştirmenizi sağlayan

öğeler ekleyerek Flash geliştirme ortamını zenginleştirir. Flash içinde AIR uygulama dosyaları oluşturmanıza, test

etmenize ve bu dosyaların hataları ayıklamanıza olanak tanır.

Adobe® Flash® CS4 Professional, AIR uygulamaları oluşturma işlemi için yerleşik desteğe sahiptir. Daha fazla bilgi için,

Flash Uygulamasını Kullanma bölümündeki Adobe AIR için yayınlama konusunu inceleyin.

Flash CS3 için Adobe AIR Güncellemesi'ne yönelik sistem gereksinimleri

AIR uygulamaları geliştirmek ve çalıştırmak üzere Flash CS3 uygulamasını kullanabilmek için aşağıdaki yazılımları

yüklemiş olmanız gerekir:

• Flash CS3 Professional

Flash CS3 Professional uygulamasına sahip değilseniz Adobe web sitesinden satın alabilirsiniz:

http://www.adobe.com/products/flash

• Adobe AIR

Adobe AIR uygulamasını yükleme ile ilgili bilgiler için bkz. “Adobe AIR yüklemesi” sayfa 1.

• Flash CS3 için Adobe AIR güncellemesi

Daha önce Flash CS3 için Adobe AIR güncellemesi yüklediyseniz Flash CS3 için Adobe AIR güncellemesini kaldırma

bölümündeki adımları izleyerek bu uygulamayı kaldırın. Daha önce Flash CS3 için Adobe AIR güncellemesi

yüklemediyseniz“Flash için Adobe AIR güncellemesi yükleme CS3” sayfa 5 bölümüne geçin.

Flash CS3 için Adobe AIR güncellemesini kaldırma

Flash CS3 için Adobe AIR güncellemesini daha önceden yüklediyseniz, yeni Flash CS3 için Adobe AIR güncellemesini

yüklemeden önce aşağıdaki adımları takip ederek eskisini kaldırın.

1 Aşağıdaki klasörü silin:

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\AIK

(Mac) HD:/Applications/Adobe Flash CS3/AIK

2 Aşağıdaki konumu açın:

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\<dil>\First Run\Commands\

(Mac) HD:/Applications/Adobe Flash CS3/First Run/Commands

ve aşağıdaki dosyaları/klasörleri silin:

• AIR klasörü

Page 12: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

5ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 için Adobe AIR Güncellemesi'ni ayarlama

• AIR - Application and Installer Settings.jsfl

• AIR - Create AIR File.jsfl

3 Aşağıdaki dosyayı silin:

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\<dil>\Configuration\External Libraries\FLAir.dll

(Mac) HD:/Applications/Adobe Flash CS3/Configuration/External Libraries/FLAir.bundle.

4 Aşağıdaki dosyayı silin:

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\<dil>\Configuration\Players\AdobeAIR1_0.xml

(Mac) HD:/Applications/Adobe Flash CS3/Configuration/Players/ AdobeAIR1_0.xml

5 Aşağıdaki konumu açın:

(Windows) HD:\Document and Settings\<kullanıcı adı>\Local Settings\Application Data\Adobe\Flash

CS3\<dil>\Configuration\Commands\

(Mac) HD:/Users/<username>/Library/Application Support/Adobe/Flash CS3/<dil>/Configuration/Commands/

ve aşağıdaki dosyaları/klasörleri silin:

• AIR klasörü

• AIR - Application and Installer Settings.jsfl

• AIR - Create AIR File.jsfl

Not: Windows işletim sisteminde belirtilen konumu göremiyorsanız klasör seçeneklerinden "Gizli dosyaları göster"

seçeneğini işaretleyin.

Flash için Adobe AIR güncellemesi yükleme CS3

Flash CS3 için Adobe AIR güncellemesini yüklemeden önce Flash uygulamasını ve açık olan tarayıcı pencerelerini

kapatın.

• Flash CS3 için Adobe AIR güncellemesi uygulamasını indirin.

• Güncellemeyi indirdikten sonra güncelleme yama dosyasını çift tıklatıp yükleyin.

Flash CS3 uygulamasına yönelik Adobe AIR eklemeleri

Adobe AIR güncellemesini yükledikten sonra, Flash içerisinde aşağıdaki değişiklikleri görebilirsiniz:

• Yayınlama Ayarları iletişim kutusunda (Dosya -> Yayınlama Ayarları) Flash sekmesi altında bulunan Sürüm

menüsüne Adobe AIR 1.0 için yeni bir giriş eklenmiştir.

• Karşılama ekranı güncellenmiş, bir Flash Dosyası (Adobe AIR) oluşturmak için kullanılabilecek olan yeni bir giriş

eklenmiştir.

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\FirstRun\StartPage

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\FirstRun\StartPage\resources

Not: Macintosh bilgisayarlarda Karşılama ekranında Flash Dosyası (Adobe AIR) görünmüyorsa, aşağıdaki klasörü

silin ve Flash uygulamasını yeniden başlatın:

Page 13: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

6ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 için Adobe AIR Güncellemesi'ni ayarlama

HD:/Users/<kullanıcı adı>/Libraries/Application Support/Adobe/Flash CS3/<dil>/Configuration/StartPage

• ActionScript 3.0/Classes klasörü içindeki tüm ActionScript 3.0 API'lerini ve Adobe AIR API'lerini içeren yeni

playerglobal.swc dosyası eklenmiştir.

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\Configuration\ActionScript 3.0 Classes

(Mac) HD:/Applications/Adobe Flash CS3/Configuration/ActionScript 3.0/Classes/

• Yeni jsfl dosyaları (AIR - Application and Installer Settings.jsfl, AIR - Publish AIR File.jsfl) eklenmiştir.

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\FirstRun\Commands

(Mac) HD:/Applications/Adobe Flash CS3/First Run/Commands/

• Adobe AIR Yazılım Geliştirme Kiti (AIK) eklenmiştir.

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\AIK

• Harici kitaplık eklenmiştir.

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\Configuration\External Libraries

(Mac) HD:/Applications/Adobe Flash CS3/Configuration/External Libraries/

• Hedef yapılandırma dosyası eklenmiştir.

(Windows) HD:\Program Files\Adobe\Adobe Flash CS3\tr\Configuration\Players\

(Mac) HD:/Applications/Adobe Flash CS3/Configuration/Players

Page 14: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

7

Bölüm 3: Adobe AIR'e Giriş

Adobe® AIR™, masaüstünde Zengin Internet Uygulamaları (RIA'lar) kurmak ve konuşlandırmak için var olan web

geliştirme becerilerinizi (Adobe® Flash® CS3 Professional, Adobe® Flex™, HTML, JavaScript®, Ajax) yükseltmenizi

sağlayacak işletim sistemleri arası çalışma zamanıdır .

AIR, kullanımını en pratik bulduğunuz araçları ve yaklaşımları geliştirmek için alışkın olduğunuz ortamlarda

çalışmanızı ve Flash, Flex, HTML, JavaScript ve Ajax uygulamalarını destekleyerek ihtiyaçlarınızı karşılayacak en iyi

deneyimi yaşamanızı sağlar.

Örneğin aşağıdaki teknolojilerin biri veya bir kombinasyonu kullanılarak uygulamalar geliştirilebilir:

• Flash / Flex / ActionScript

• HTML / JavaScript / CSS / Ajax

• PDF herhangi bir uygulamayla geliştirilebilir

Bunun sonucunda AIR uygulamaları şu şekillerde kullanılabilir:

• Flash veya Flex'e dayalı olarak: Kök içeriği Flash/Flex (SWF) olan uygulama

• HTML veya PDF'yle beraber Flash veya Flex'e dayalı olarak. HTML (HTML, JS, CSS) veya PDF içeriğiyle beraber

kök içeriği Flash/Flex (SWF) olan uygulamalar

• HTML tabanlı. Kök içeriği HTML, JS, CSS olan uygulama

• Flash/Flex veya PDF'yle beraber HTML tabanlı. Flash/Flex (SWF) veya PDF içeriğiyle beraber kök içeriği HTML

olan uygulamalar

Kullanıcılar AIR uygulamalarıyla etkileşime, yerel masaüstü uygulamalarıyla geçtikleri gibi geçerler. Kullanıcının

bilgisayarına çalışma zamanı yüklenir, ardından AIR uygulamaları yüklenir ve diğer masaüstü uygulamaları gibi

çalışır.

Çalışma zamanı, uygulamaların konuşlandırılması için tutarlı bir işletim sistemleri arası platform ve çerçeve sağlar ve

böylece masaüstleri arasında tutarlı işlevsellik ve etkileşim sağlayarak tarayıcılar arası testi ortadan kaldırır. Belirli bir

işletim sistemi için geliştirme yapmak yerine, çalışma zamanını hedef aldığınızda şu gibi faydalardan yararlanırsınız:

• AIR için geliştirilen uygulamalar, size ek bir iş yükü getirmeden birden çok işletim sistemi arasında çalışır. Çalışma

zamanı, AIR tarafından desteklenen tüm işletim sistemlerinde tutarlı ve tahmin edilebilir sunumlar ve etkileşimler

sağlar.

• Var olan web teknolojilerini ve tasarım modellerini geliştirmeniz ve geleneksel masaüstü geliştirme teknolojilerini

veya yerel kod karmaşıklığını öğrenmeden web tabanlı uygulamalarınızı masaüstüne genişletebilmeniz sağlanarak

uygulamalar daha hızlı oluşturulabilir.

• Uygulama geliştirme, C ve C++ gibi düşük düzeyli diller kullanmaktan daha kolaydır. Her işletim sistemi için farklı

olan, karmaşık, düşük düzey API'leri öğrenmeniz gerekmez.

AIR için uygulama geliştirirken, zengin bir çerçeve ve API kümesi geliştirebilirsiniz:

• Çalışma zamanı ve AIR çerçevesi tarafından sağlanan AIR'e özgü API'ler

• SWF dosyalarında ve Flex çerçevesinde kullanılan ActionScript API'leri (bunun yanında diğer ActionScript tabanlı

kitaplıklar ve çerçeveler)

Page 15: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

8ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Adobe AIR'e Giriş

• HTML, CSS ve JavaScript

• Çoğu Ajax çerçevesi

AIR, uygulamaların oluşturulma, konuşlandırılma ve deneyim edilme şekillerini ciddi bir şekilde değiştirir. Daha

yaratıcı bir kontrole sahip olursunuz ve geleneksel masaüstü geliştirme teknolojilerini öğrenmeden Flash, Flex, HTML

ve Ajax tabanlı uygulamalarınızı masaüstüne genişletebilirsiniz.

Page 16: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

9

Bölüm 4: AIR Kaynaklarını bulma

Adobe® AIR™ uygulamalarının geliştirilmesi hakkında daha fazla bilgi için aşağıdaki kaynaklara bakınız:

Adobe ve topluluk uzmanlarına ait makaleler, örnekler ve sunumları http://www.adobe.com/devnet/air/ linklerindeki

Adobe AIR Geliştirici Bağlantısı'nda bulabilirsiniz. Buradan Adobe AIR ve ilişkili yazılımları da indirebilirsiniz.

Flash geliştiricilerine özgü bir bölümü http://www.adobe.com/devnet/air/flash/ linklerinde bulabilirsiniz.

Ürününüze ilişkin sorun giderme bilgilerini bulmak ve ücretli - ücretsiz teknik destek seçeneklerini öğrenmek için

www.adobe.com/support adresindeki Adobe Support web sitesini ziyaret edin. Adobe Press kitaplarına, çeşitli eğitim

kaynaklarına, Adobe yazılım sertifikası programlarına ve daha fazlasına erişim için Training (Eğitim) bağlantısını

izleyin.

Kaynak Konum

ActionScript 3.0'ı Programlama http://www.adobe.com/go/learn_fl_cs4_programmingAS3_tr

ActionScript 3.0 Dil ve Bileşen Başvurusu (AIR dahil) http://www.adobe.com/go/learn_flashcs4_langref_tr

Flash için Adobe AIR Hızlı Başlangıçları http://www.adobe.com/go/learn_air_flash_qs_tr

Flash'ı Kullanma http://www.adobe.com/go/learn_fl_cs4_using_tr

ActionScript 3.0 Bileşenlerini Kullanma http://www.adobe.com/go/learn_fl_cs4_as3components_tr

Page 17: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

10

Bölüm 5: Flash CS3 veya CS4'te ilk AIR uygulamanızı oluşturma

Adobe® AIR™ uygulamasının nasıl çalıştığını hızlı ve uygulamalı olarak görmek için bu konu başlığı altındaki

talimatları izleyip basit bir "Hello World" AIR uygulaması oluşturun ve paketleyin.

Daha önce yapmadıysanız Flash CS3 için Adobe AIR güncellemesini indirin ve yükleyin. Flash CS3 için Adobe AIR

uygulamasını yükleme ile ilgili daha fazla bilgi için “Flash CS3 için Adobe AIR Güncellemesi'ni ayarlama” sayfa 4

bölümünü inceleyin.

Flash CS4 kullanıyorsanız Adobe AIR desteği yerleşiktir, bu nedenle çalışmaya başlamak için herhangi bir şeyi

yüklemenize gerek yoktur.

Flash içinde Hello World uygulamasını oluşturma

Flash içinde bir Adobe AIR uygulaması oluşturma, sıradan bir Flash uygulaması oluşturmaya benzer. Aradaki fark,

Karşılama ekranından başlayarak bir Flash dosyası (Adobe AIR) oluşturmanız ve sonunda uygulama ve yükleyici

ayarlarını oluşturup AIR uygulamanızı yüklemenizdir. Aşağıdaki adımlar size basit bir Hello World uygulaması

oluşturma sürecinde kılavuzluk edecektir.

Hello World uygulamasını oluşturmak için

1 Flash uygulamasını başlatın.

2 Karşılama Ekranı'nda Adobe AIR yayınlama ayarları ile boş bir FLA dosyası oluşturmak için Flash Dosyası (Adobe

AIR) seçeneğini tıklatın.

3 Flash CS3 ile Adobe AIR için Geliştirme İşlemi özet iletişim kutusuna yanıt vermek için Tamam düğmesini tıklatın.

Bu iletişim kutusunun ilk açılışı birkaç saniye sürebilir. (Bu iletişim kutusu Flash CS4 uygulamasında

görüntülenmez.)

4 Araçlar panelinde Metin aracını seçin ve Sahne Alanı'nın ortasında statik bir metin alanı (varsayılan) oluşturun. 15

- 20 karakter alacak şekilde genişletin.

5 Metin alanına "Hello World" metnini yazın.

6 Dosyayı bir ad vererek (örneğin helloAIR) kaydedin.

Uygulamayı test etme

1 Uygulamayı Adobe AIR'de test etmek için Ctrl + Enter tuşlarına basın veya Kontrol Et -> Filmi Test Et'i seçin.

2 Film Hatalarını Ayıkla özelliğini kullanmak için ilk olarak uygulamaya ActionScript kodu ekleyin. Aşağıdaki gibi

bir izleme ifadesi ekleyerek bunu hızlı bir şekilde deneyebilirsiniz:

trace("Running AIR application using Debug Movie");

3 Uygulamayı Film Hatalarını Ayıkla özelliği ile çalıştırmak için Ctrl + Shift + Enter tuşlarına basın veya Kontrol Et-

> Film Hatalarını Ayıkla'yı seçin.

Page 18: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

11ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 veya CS4'te ilk AIR uygulamanızı oluşturma

4 Flash CS3'te AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu açmak için menüden Komutlar > AIR -

Uygulama ve Yükleyici Ayarları öğesini seçin. Flash CS4'te Dosya > AIR Ayarları'nı seçerek bu iletişim kutusunu

açabilirsiniz.

5 Adobe AIR paketini kendinden imzalı bir dijital sertifika ile imzalayın:

a Dijital İmza iletişim kutusunu açmak için Dijital İmza istemine yönelik Ayarla düğmesini tıklatın.

b Kendinden İmzalı Dijital Sertifika Oluştur iletişim kutusunu açmak için Oluştur düğmesini tıklatın.

c Yayıncı adı, Birim, Kurum adı, E-posta, Ülke, Şifre ve Şifreyi Doğrulayın bilgilerini tamamlayın.

d Sertifika türünü belirleyin. Sertifika Türü seçeneği güvenlik düzeyini belirlemenizi sağlar: 1024-RSA, 1024-bit

anahtar (daha az güvenli) kullanırken 2048-RSA, 2048-bit anahtar kullanır (daha güvenli).

e Farklı kaydet girişini tamamlayarak veya bir klasör konumuna göz atmak için Gözat... düğmesini tıklatarak

bilgiyi bir sertifika dosyası içine kaydedin. (Örneğin C:/Temp/mycert.pfx) Kaydetme işlemini tamamladığınızda

Tamam düğmesini tıklatın.

f Flash Dijital İmza İletişim Kutusuna geri döner. Oluşturduğunuz kendinden imzalı sertifikanın yolu ve dosya

adı Sertifika metin kutusunda görüntülenir. Görüntülenmiyorsa, yol ve dosya adını girin veya Gözat düğmesini

tıklatarak dosyayı bulup seçin.

Page 19: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

12ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 veya CS4'te ilk AIR uygulamanızı oluşturma

g Dijital İmza iletişim kutusu Şifre metin alanına c adımında atadığınız şifreyi girin ve Tamam düğmesini tıklatın.

Adobe AIR uygulamalarınızı imzalama ile ilgili daha fazla bilgi için “Uygulamanızı imzalama” sayfa 21

bölümünü inceleyin.

6 Uygulama ve yükleyici dosyasını oluşturmak için AIR Dosyasını Yayınla düğmesini tıklatın. AIR dosyasını

oluşturmadan önce SWF ve application.xml dosyalarını oluşturmak için Filmi Test Et veya Film Hatalarını Ayıkla

eylemlerini önceden gerçekleştirmeniz gerekir.

7 Uygulamayı yüklemek için, uygulamanızı kaydettiğiniz klasörün içinde bulunan AIR dosyasını (application.air) çift

tıklatın.

8 Uygulama Yüklemesi iletişim kutusunda Yükle düğmesini tıklatın.

9 Yükleme Tercihlerini ve Konum ayarlarını inceledikten sonra "Yüklemeden sonra uygulamayı başlat" onay

kutusunun işaretli olduğundan emin olun. Ardından Devam düğmesini tıklatın.

10 Yükleme Tamamlandı mesajı görüntülendiğinde Son düğmesini tıklatın.

Hello World uygulaması aşağıdaki resimde gösterildiği gibi görünür:

Bir Flash uygulamasını Adobe AIR uygulamasına çevirme

Var olan bir Flash uygulamasını da AIR uygulamasına dönüştürebilirsiniz. Flash CS3'te bu işlemi gerçekleştirme

konusunda bilgi almak için bkz. “Adobe AIR yayınlama ayarlarını belirleme” sayfa 13. Flash CS4 kullanıyorsanız,

Flash Uygulamasını Kullanma bölümündeki Adobe AIR için yayınlama konusunu inceleyin.

Page 20: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

13

Bölüm 6: Flash CS3 Professional için Adobe AIR Güncellemesi

Adobe® Flash® CS3 Professional için Adobe® AIR™ güncellemesi, geliştirme ortamını zenginleştirerek Flash ile Adobe

AIR uygulamaları oluşturmanızı, hatalarını ayıklamanızı ve paketlemenizi sağlar. Bir Adobe AIR uygulaması

oluşturma süreci; bir Adobe AIR FLA dosyası oluşturma, uygun yayınlama ayarlarını yapma, uygulamayı geliştirme

ve uygulamayı konuşlandırmak için uygulama ve yükleyici dosyalarını oluşturma adımlarını içerir.

Adobe® Flash® CS4 Professional kullanıyorsanız AIR uygulamaları oluşturma konusunda daha fazla bilgi için Flash

Uygulamasını Kullanma bölümündeki Adobe AIR için yayınlama konusunu inceleyin.

Uygulamanız içerisinde kullanabileceğiniz Adobe AIR ActionScript™ API'leri hakkında bilgi için ActionScript 3.0 Dil

ve Bileşenler Başvurusu'nu inceleyin.

Adobe AIR ActionScript API'lerinin listesi için bkz. “Adobe AIR uygulamasındaki yeni işlevler” sayfa 49.

Not: air.net paketinde sınıf kullanmak için ilk olarak ServiceMonitorShim bileşenini Bileşenler panelinden Kitaplık

paneline sürükleyin ve ActionScript 3.0 kodunuzun içerisine aşağıdaki import ifadesini ekleyin:

import air.net.*;

Bir Adobe AIR dosyası oluşturma

Flash Karşılama ekranını kullanarak bir Flash Dosyası (Adobe AIR) oluşturabilir veya bir Flash Dosyası (ActionScript™

3.0) oluşturup bunu Yayınlama Ayarları iletişim kutusundan bir Adobe AIR dosyasına dönüştürebilirsiniz. Ancak

Yeni Belge iletişim kutusunu kullanarak (Dosya > Yeni) bir Adobe AIR dosyası oluşturamazsınız. Bir Flash dosyasını

Adobe AIR dosyasına dönüştürmeyle ilgili bilgiler için bkz. “Adobe AIR yayınlama ayarlarını belirleme” sayfa 13.

1 Flash uygulamasını başlatın ya da Flash uygulamasını zaten başlattıysanız, açık pencereleri kapatarak Karşılama

ekranına geri dönün.

Not: Flash Karşılama ekranını devre dışı bıraktıysanız Düzen > Tercihler'i seçip Genel kategorisindeki Başlangıç

açılır menüsünde Karşılama Ekranı'nı işaretleyerek yeniden görüntülenmesini sağlayabilirsiniz.

2 Karşılama Ekranı'nda, Flash Dosyası'nı (Adobe AIR) tıklatın.

Adobe AIR uygulama ayarlarına ve Yardım belgelerine nasıl erişeceğinizi bildiren bir uyarı iletişim kutusu açılır.

Bir Daha Gösterme seçeneğini işaretleyerek bu uyarının gelecekte bir daha gösterilmemesini sağlayabilirsiniz,

ancak bunu yaparsanız ileride tekrar gösterilmesini sağlamanın hiçbir yolu yoktur.

Adobe AIR yayınlama ayarlarını belirleme

Bir AIR dosyasının ayarlarını incelemek veya değiştirmek ve bir Flash Dosyası (ActionScript 3.0) belgesini Flash

Dosyası (Adobe AIR) belgesine dönüştürmek için Flash yayınlama ayarlarını kullanın.

Adobe AIR yayınlama ayarlarını görüntüleme

1 Flash Karşılama ekranında bir Flash Dosyası (Adobe AIR) belgesi açın.

Page 21: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

14ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

2 Dosya > Yayınlama Ayarları'nı seçin ve Flash sekmesini tıklatarak Adobe AIR yayınlama ayarlarını açın.

Bir Adobe AIR belgesi açtığınızda Sürüm menüsünde Adobe AIR 1.0 otomatik olarak seçilidir. ActionScript™

sürümü otomatik olarak ActionScript 3.0'a ayarlanmıştır. Yerel oynatma güvenliği ayarı AIR SWF dosyası ile ilgili

olmadığından silik biçimde görüntülenir.

Açtığınız bir Flash FLA dosyasını yayınlama ayarlarını değiştirerek bir Flash AIR dosyasına dönüştürebilirsiniz.

Yayınlama Ayarları iletişim kutusunu kullanarak bir Flash FLA dosyasını Flash AIR dosyasına dönüştürme

1 Şunlardan birini yapın:

• Var olan bir Flash dosyasını açın.

• Yeni bir Flash dosyası oluşturmak için Karşılama ekranını kullanın veya Dosya > Yeni seçin.

2 Dosya > Yayınlama Ayarları'nı seçin.

3 Flash sekmesindeki Sürüm açılır menüsünden Adobe AIR 1.0'ı seçin.

ActionScript sürümü girişi devre dışıdır çünkü bir AIR dosyası için yalnızca ActionScript 3.0 seçilebilir.

Flash dosyası ve Adobe AIR dosyası için kalan varsayılan seçenekler için aynıdır.

4 Yayınla düğmesini tıklattıktan sonra Tamam düğmesini tıklatarak Yayınlama Ayarları iletişim kutusunu kapatın.

Seçim aracı seçildiğinde Özellik denetçisi artık Player hedefinin Adobe AIR 1 olduğunu gösterir.

Not: Adobe AIR 1.0 profilini seçtiğinizde, Flash otomatik olarak Classpath ortam değişkenine AIR playerglobal.swc

dosyasının konumunu ekler. AIR playerglobal.swc dosyası ActionScript AIR API'lerini kullanmanızı sağlar. Ancak

Adobe AIR 1'den Adobe® Flash® Player 9'a geçtiğinizde Flash otomatik olarak varsayılan profile geri dönmez veya

Classpath ayarını Flash Player 9 için playerglobal.swc dosyasını kullanacak şekilde değiştirmez. Yayınlama ayarını

Adobe AIR 1 yerine Flash Player 9 olarak değiştirirseniz, yayınlama profilini de Varsayılan olarak değiştirmeniz

gerekir.

Yayınlama Ayarları iletişim kutusu ile ilgili daha fazla bilgi için www.adobe.com/go/learn_fl_using_tr adresindeki

Flash Uygulamasını Kullanma başlığına bakın.

Komutlar menüsünü kullanarak bir Flash FLA dosyasını Flash AIR uygulamasına dönüştürme

1 Flash FLA dosyanızı açın.

2 Yeni bir Flash Dosyası (ActionScript 3.0) açıyorsanız bu dosyayı kaydedin. Kaydetmemeniz halinde bir sonraki

adımda bir uyarı mesajı görüntülenir.

3 Komutlar > AIR - Uygulama ve Yükleyici Ayarları'nı seçin.

Dosyayı Adobe AIR yayınlama ayarlarına dönüştürmeyi isteyip istemediğinizi soran bir uyarı kutusu açılır.

4 FLA dosyasını Adobe AIR yayınlama ayarlarına dönüştürmek için Tamam'ı tıklatın. AIR - Uygulama ve Yükleyici

Ayarları iletişim kutusu açılır.

AIR - Uygulama ve Yükleyici Ayarları iletişim kutusu hakkında bilgi için bkz. “AIR uygulaması ve yükleme

dosyaları oluşturma” sayfa 15.

Dönüştürdüğünüz AIR FLA dosyasında Filmi Test Et, Film Hatalarını Ayıkla ve AIR Dosyası Oluştur komutlarını

kullanabilirsiniz.

Page 22: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

15ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

Bir Adobe AIR uygulamasının önizlemesini görüntüleme

AIR uygulama penceresinde açılacağı şekilde bir Flash AIR SWF dosyasının önizlemesini görüntüleyebilirsiniz.

Uygulamayı paketleyip yüklemeden önce uygulamanın görsel öğelerinin nasıl görüneceğini görmek istediğinizde

önizleme görüntülemek işinize yarayacaktır.

1 Yayınlama ayarlarını bir Adobe AIR uygulamasına göre yaptığınızdan emin olun. Daha fazla bilgi için bkz. “Adobe

AIR yayınlama ayarlarını belirleme” sayfa 13.

2 Kontrol > Filmi Test Et'i seçin veya Ctrl + Enter tuşlarına basın.

Uygulama ayarlarını AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu kullanarak yapmamanız halinde,

Flash sizin yerinize SWF dosyasının yazıldığı klasörün içinde bir varsayılan uygulama tanımlayıcı dosyası (swfadı-

app.xml) oluşturur. AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu kullanarak uygulama ayarlarını

yapmanız halinde uygulama tanımlayıcı dosyası yaptığınız bu ayarları gösterir.

Bir Adobe AIR uygulamasının hatalarını ayıklama

Adobe AIR SWF dosyasının hataları, uzaktan hata ayıklama durumu dışında bir Flash Player 9 ActionScript 3.0 SWF

dosyası gibi ayıklanabilir.

1 Adobe AIR yayınlama ayarlarını yaptığınızdan emin olun.

2 Eylemler paneline (Pencere > Eylemler) ActionScript kodu ekleyin. Test etmek için Eylemler paneline, Zaman

Çizelgesi'nin ilk karesine aşağıdaki gibi bir trace() ifadesi ekleyebilirsiniz:

trace("My application is running");

3 Hata Ayıkla > Film Hatalarını Ayıkla'yı seçin veya Ctrl + Shift + Enter tuşlarına basın.

Flash, ActionScript hata ayıklayıcıyı başlatır ve SWF dosyasını hata ayıklama bilgileriyle birlikte dışa aktarır.

Uygulama ayarlarını AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu kullanarak yapmamanız halinde,

Flash sizin yerinize SWF dosyasının yazıldığı klasörün içinde bir varsayılan uygulama tanımlayıcı dosyası (swfadı-

app.xml) oluşturur. AIR - Uygulama ve Yükleyici Ayarlarını kullanarak uygulama ayarlarını yapmanız halinde

uygulama tanımlama dosyası yaptığınız bu ayarları gösterir.

Uygulamanızın hatalarını ayıklamak için Hata Ayıkla > Film Hatalarını Ayıkla'yı seçtiğinizde veya Ctrl + Shift +

Enter tuşlarına bastığınızda Flash, uygulamanızın ActionScript kodu içerip içermediğini belirten bir uyarı

görüntüler.

AIR uygulaması ve yükleme dosyaları oluşturma

Uygulamanızı tamamladıktan sonra konuşlandırmak için AIR uygulamasını ve yükleyici dosyalarını oluşturun.

Adobe AIR Flash Komutlar menüsüne iki yeni öğe ekler: AIR - Uygulama ve Yükleyici Ayarları ve AIR - AIR Dosyası

Oluştur. AIR uygulamasını ve yükleyici ayarlarını oluşturduktan sonra varolan ayarlarla AIR (.air) dosyasını yeniden

oluşturmak için AIR - AIR Dosyası Oluştur öğesini kullanabilirsiniz.

Adobe AIR uygulama ve yükleyici dosyalarını oluşturma

1 Flash içinde Adobe AIR uygulamanızı oluşturan sayfayı veya sayfa dizisini açın.

2 AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunu açmadan önce Adobe AIR FLA dosyasını kaydedin.

Page 23: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

16ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

3 Komutlar > AIR - Uygulama ve Yükleyici Ayarları'nı seçin.

4 AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda gerekli alanları doldurduktan sonra AIR Dosyasını

Yayınla düğmesini tıklatın.

AIR Dosyasını Yayınla düğmesini tıklattığınızda şu öğeler paketlenir: FLA dosyası, SWF dosyası, uygulama

tanımlayıcı dosyası, uygulama simge dosyaları ve Eklenen Dosyalar metin kutusunda listelenen dosyalar. Daha

önce dijital sertifika oluşturmadıysanız, AIR Dosyasını Yayınla düğmesini tıklattığınızda Flash, Dijital İmza iletişim

kutusunu görüntüler.

AIR - Uygulama ve Yükleyici Ayarları iletişim kutusu iki bölüme ayrılmıştır: Uygulama Ayarları ve Yükleyici Ayarları.

Bu ayarlarla ilgili daha fazla bilgi için aşağıdaki bölümleri inceleyin.

Uygulama ayarları

AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunun Uygulama ayarları bölümünde aşağıdaki seçenekler yer alır:

Dosya Adı Uygulamanın ana dosyasının adı. Varsayılan olarak SWF dosyasının adını alır.

Ad Yükleyici tarafından uygulama dosya adını ve uygulama klasörünü oluşturmak için kullanılan ad. Bu adın

yalnızca, dosya adları veya klasör adları için geçerli olan karakterleri içermesi gerekir. Varsayılan olarak SWF

dosyasının adını alır.

Sürüm İsteğe bağlı. Uygulamanız için bir sürüm numarası belirtir. Varsayılan olarak boştur.

Kimlik Uygulamanıza benzersiz bir kimlik ile tanımlar. İsterseniz varsayılan kimliği değiştirebilirsiniz. Kimlikte

boşluk veya özel karakter kullanmayın. Geçerli karakterler: 0-9, a-z, A-Z, . (nokta) ve - (tire), 1 ila 212 karakter

uzunluğunda. Varsayılan olarak com.adobe.example �eklindedir.uygulama_adı.

Açıklama İsteğe bağlı. Kullanıcı uygulamayı yüklediğinde görüntülenecek bir uygulama açıklaması girmenize olanak

tanır. Varsayılan olarak boştur.

Telif Hakkı İsteğe bağlı. Kullanıcı uygulamayı yüklediğinde görüntülenecek bir telif hakkı bildirimi girmenize olanak

tanır.

Pencere Stili Kullanıcı uygulamayı bilgisayarında çalıştırdığında kullanıcı arabiriminde kullanılacak pencere stilini

(veya kenarlığını) belirtir. İşletim sisteminin kullandığı görsel stile başvuran Sistem Kenarlığı seçeneğini

belirleyebilirsiniz. Ayrıca Özel Kenarlık (opak) veya Özel Kenarlık (saydam) seçeneğini de belirleyebilirsiniz.

Uygulamanızı sistem kenarlığı olmadan görüntülemek için Hiçbiri seçeneğini belirleyin. Sistem Kenarlığı seçeneği

uygulamayı işletim sistemi standardı pencere kontrolü ile çevreler. Özel Kenarlık (opak) seçeneği standart sistem

kenarlığını kaldırarak kendi uygulamanıza özel bir kenarlık oluşturmanıza olanak tanır. (Özel kenarlık doğrudan FLA

dosyası içinde oluşturulur.) Özel Kenarlık (saydam) seçeneği de Özel Kenarlık (opak) gibidir, ancak sayfa kenarlarına

saydamlık ekler. Bu saydamlık kare veya dikdörtgen şeklinde olmayan uygulama pencerelerinin kullanılabilmesini

sağlar.

Simge İsteğe bağlı. Uygulama için bir simge belirtmenize olanak verir. Uygulama kurulduktan ve Adobe AIR'de

çalıştırıldıktan sonra bu simge gösterilir. Simgenin farklı boyutlarda görüntülenebilmesini sağlamak için dört farklı

boyut (128, 48, 32 ve 16 piksel) belirtebilirsiniz. Örneğin simge, dosya tarayıcısında küçük resim, ayrıntı ve döşeme

görünümlerinde görüntülenebilir. Ayrıca masaüstü simgesi olarak ve AIR uygulama penceresinin başlığında da

görüntülenebileceği gibi başka yerlerde de kullanılabilir.

Herhangi bir simge dosyası belirtilmemesi halinde simge görüntüsü için varsayılan örnek AIR uygulama simgesi

kullanılır.

Bir simge belirtmek için AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda Simge Görüntüsü Seç düğmesini

tıklatın. Açılan Simge görüntüleri iletişim kutusunda, simge boyutlarından her biri için klasörü tıklatın ve kullanılacak

simge dosyasını seçin. Dosyalar PNG (Portable Network Graphics - Taşınabilir Ağ Grafiği) formatında olmalıdır.

Page 24: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

17ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

Aşağıdaki resimde varsayılan Adobe AIR uygulama simgelerini görüntüleyen Simge Görüntüleri iletişim kutusu

gösterilmektedir.

Farklı boyutlarda uygulama simgesi görüntüsü belirtme

Belirttiğiniz görüntünün boyutları istenen ölçülerde olmalıdır (128x128, 48x48, 32x32 veya 16x16). Simge

boyutlarından herhangi birine uygun bir görüntü belirtmemeniz halinde Adobe AIR verilen görüntülerden birini

ölçekleyerek eksik simge görüntüsünün yerine koyar.

Gelişmiş Ayarlar

AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda bulunan Ayarlar düğmesi uygulama tanımlayıcı dosyası için

gelişmiş ayarlar belirlemenize olanak tanır. Ayarlar düğmesini tıklattığınızda Gelişmiş Ayarlar iletişim kutusu

görüntülenir.

Gelişmiş Ayarlar iletişim kutusu uygulamanın işlemesi gereken ilişkilendirilmiş dosya türlerini belirtmenize olanak

tanır. Örneğin uygulamanızın HTML dosyalarını işleme konusunda ana uygulama olmasını istiyorsanız bunu

İlişkilendirilmiş Dosya Türleri metin kutusunda belirtmeniz gerekir.

Ayrıca uygulamanın aşağıda gösterilen kısımları için de ayar belirtebilirsiniz:

• Başlangıç penceresinin boyutu ve yerleşimi

• Uygulamanın yükleneceği klasör

• Uygulamanın yerleştirileceği Program menü klasörü.

İletişim kutusu şu seçenekleri içerir:

İlişkilendirilmiş dosya türleri AIR uygulamasının işleyeceği ilişkilendirilmiş dosya türlerini belirtmenizi sağlar. Metin

kutusuna yeni bir dosya türü eklemek için Artı (+) düğmesini tıklatın. Artı düğmesini tıklattığınızda Dosya Türü

Ayarları iletişim kutusu açılır. Eksi (-) düğmesini tıklattığınızda metin kutusunda seçili olan öğe kaldırılır. Kalem

düğmesini tıklattığınızda Dosya Türü Ayarları iletişim kutusu açılır ve metin kutusunda seçtiğiniz öğeyi

düzenlemenizi sağlar. Varsayılan olarak Eksi (-) ve Kalem düğmeleri silik biçimde görüntülenir. Metin kutusunda bir

Page 25: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

18ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

öğe seçtiğinizde Eksi (-) ve Kalem düğmeleri etkinleşerek seçtiğiniz öğeyi kaldırmanızı veya düzenlemenizi sağlar.

Metin kutusundaki varsayılan değeri Hiçbiri'dir.

İlişkilendirilmiş dosya türleri için dosya türü ayarları ile ilgili daha fazla bilgi için, bkz. “Dosya türü ayarları” sayfa 18.

Başlangıç penceresi ayarları Başlangıç uygulama penceresi için boyut ve yerleşim ayarlarını belirtmenizi sağlar.

• Genişlik: Pencerenin başlangıç genişliğini piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.

• Yükseklik: Pencerenin başlangıç yüksekliğini piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.

• X: Pencerenin başlangıç yatay konumunu piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.

• Y: Pencerenin başlangıç dikey konumunu piksel cinsinden belirtir. Bu değer varsayılan olarak boş bırakılmıştır.

• Maksimum Genişlik ve Maksimum Yükseklik: Pencerenin maksimum boyutunu piksel cinsinden belirtir. Bu

değerler varsayılan olarak boş bırakılmıştır.

• Minimum Genişlik ve Minimum Yükseklik: Pencerenin minimum boyutunu piksel cinsinden belirtir. Bu değerler

varsayılan olarak boş bırakılmıştır.

• Büyütülebilir: Kullanıcının pencereyi büyütüp büyütemeyeceğini belirtmenizi sağlar. Bu seçenek varsayılan olarak

seçilidir (veya true değeri verilmiştir).

• Küçültülebilir: Kullanıcının pencereyi küçültüp küçültemeyeceğini belirtmenizi sağlar. Bu seçenek varsayılan

olarak seçilidir (veya true değeri verilmiştir).

• Yeniden Boyutlandırılabilir: Kullanıcının pencereyi yeniden boyutlandırıp boyutlandıramayacağını belirtmenizi

sağlar. Bu seçenek belirlenmezse; Maksimum Genişlik, Maksimum Yükseklik, Minimum Genişlik ve Minimum

Yükseklik seçenekleri silik biçimde görüntülenir. Bu seçenek varsayılan olarak seçilidir (veya true değeri

verilmiştir).

• Görünür: Uygulama penceresinin başlangıçta görünür olup olmayacağını belirtmenizi sağlar. Bu seçenek

varsayılan olarak seçilidir (veya true değeri verilmiştir).

Diğer Ayarlar Yükleme ile ilgili aşağıdaki ek bilgileri belirtmenizi sağlar:

• Yükleme Klasörü: Uygulamanın yüklendiği klasörü belirtir.

• Program Menü Klasörü: Uygulama için program menü klasörü adını belirtir.

• Özel Güncelleme Kullanıcı Arabirimi: Bir kullanıcının zaten yüklenmiş olan bir uygulamanın AIR dosyasını

açtığında ne olacağını belirtir. Varsayılan olarak AIR, kullanıcının yüklenmiş olan sürümü AIR dosyası içinde

bulunan sürümle güncelleştirmesini sağlayan bir iletişim kutusu görüntüler. Kullanıcının bu kararı vermesini

istemiyor ve uygulamanın güncellemeleri üzerinde tam denetime sahip olmasını istiyorsanız bu seçeneği belirleyin.

Bu seçenek varsayılan davranışı geçersiz kılar ve uygulama kendi güncellemeleri üzerinde denetime sahip olur.

Bir AIR uygulamasını programsal olarak güncellemek konusunda bilgi için bkz. “AIR uygulamalarını güncelleme”

sayfa 290.

Dosya türü ayarları

Uygulama için ilişkilendirilmiş dosya türlerinde ekleme veya düzenleme yapmak için Gelişmiş Ayarlar iletişim

kutusundaki Artı (+) veya Kalem düğmesini tıklattığınızda Flash, Dosya Türü Ayarları iletişim kutusunu görüntüler.

Bu iletişim kutusundaki iki gerekli alan Ad ve Uzantı alanlarıdır. Tamam'ı tıklattığınızda bu alanlardan herhangi birisi

boşsa Flash bir hata iletişim kutusu görüntüler.

İlişkilendirilmiş bir dosya türü için aşağıdaki ayarları belirtebilirsiniz:

Ad Dosya türünün adı (ör: Köprü Metni İşaretleme Dili, Metin Dosyası veya Örnek).

Page 26: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

19ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

Uzantı Boşluksuz ve en fazla 39 temel alfanümerik karakterden (A-Za-z0-9) oluşan dosya adı uzantısı (örneğin html,

txt veya xmpl).

Açıklama İsteğe bağlı. Dosya türü açıklaması (örneğin Adobe Video Dosyası).

İçerik türü İsteğe bağlı. Dosya için MIME türünü belirtir.

Dosya Türü Simge Ayarları İsteğe bağlı. Dosya türü ile ilişkilendirilmiş bir simge belirtmenizi sağlar. Simgenin farklı

boyutlarda görüntülenebilmesini sağlamak için dört farklı boyut (128x128, 48x48, 32x32 ve 16x16) belirtebilirsiniz.

Örneğin simge, dosya tarayıcısında küçük resim, ayrıntı ve döşeme görünümlerinde görüntülenebilir.

Belirttiğiniz görüntünün belirttiğiniz boyutta olması gerekir. Boyutlardan herhangi biri için bir dosya

belirtmediğinizde AIR en yakın boyuttaki görüntüyü kullanır ve eksik olanın boyutlarına uyacak şekilde ölçekler.

Bir simge belirtmek için simge boyutu klasörünü tıklatıp kullanılacak simge dosyasını seçin ya da istemin yanındaki

metin kutusuna simge dosyasının yolunu ve dosya adını girin. Simge dosyası PNG formatında olmalıdır.

Yeni bir dosya türü oluşturulduktan sonra Gelişmiş Ayarlar iletişim kutusundaki Dosya Türü liste kutusunda

gösterilir.

Uygulama tanımlayıcı dosyası ayarları

Belirttiğiniz uygulama ayarları uygulama_adi-app.xml dosyasına kaydedilir. Ancak Flash uygulamasına özel bir

uygulama tanımlayıcı dosyası kullanmak istediğinizi belirtme seçeneğiniz de vardır.

Özel Uygulama Tanımlayıcı Dosyası Kullan Özel bir uygulama tanımlayıcı dosyası kullanmanızı sağlar. Özel

Uygulama Tanımlayıcı Dosyası Kullan seçeneğini belirlediğinizde iletişim kutusunun Uygulama Ayarları bölümü silik

biçimde görüntülenir. Özel uygulama tanımlayıcı dosyasının konumunu, Özel Uygulama Tanımlayıcı Dosyası Kullan

düğmesinin altında bulunan metin alanına girerek veya klasör simgesini tıklatıp dosyanın konumuna gözatarak

belirtebilirsiniz. Uygulama tanımlayıcı dosyası ile ilgili daha fazla bilgi için bkz. “Özel bir uygulama tanımlayıcı dosyası

oluşturma” sayfa 20.

Yükleyici ayarları

AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunun ikinci kısmı uygulamayı yükleme ile ilgili ayarları içerir.

Dijital İmza Tüm Adobe AIR uygulamalarının başka bir sisteme yüklenebilmesi için imzalanmış olması gerekir. Bir

Flash Adobe AIR uygulamasına dijital imza atamak ile ilgili bilgi için bkz. “Uygulamanızı imzalama” sayfa 21.

Hedef AIR dosyasının kaydedileceği yeri belirtir. Varsayılan konum FLA dosyasını kaydettiğiniz dizindir. Farklı bir

konum seçmek için klasör simgesini tıklatın. Varsayılan paket adı .air dosya uzantısına sahip olan uygulama adıdır.

Eklenen Dosyalar/Klasörler Uygulamanıza eklenecek diğer dosya ve klasörleri belirtir. Dosya eklemek için Artı (+)

düğmesini, klasör eklemek için ise klasör düğmesini tıklatın. Listenizde bulunan bir dosyayı veya klasörü silmek için

silmek istediğiniz dosyayı veya klasörü seçtikten sonra Eksi (-) düğmesini tıklatın.

Varsayılan olarak uygulama tanımlayıcı dosyası ve ana SWF dosyası paket listesine otomatik olarak eklenir. Paket

listesi Adobe AIR FLA dosyasını henüz yayınlamamış olsanız dahi bu dosyaları gösterir. Paket listesi dosyaları ve

klasörleri düz bir yapıda gösterir. Bir klasör içindeki dosyalar listelenmez ve dosyaların tam yol adları gösterilir, ancak

gerektiği zaman kısaltılır.

Simge dosyaları listeye dahil edilmez. Flash uygulaması dosyaları paketlediğinde simge dosyalarını SWF dosyasının

konumuna göre geçici bir klasöre kopyalar. Flash uygulaması paketleme tamamlandıktan sonra klasörü siler.

Page 27: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

20ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

Uygulama ve yükleyici dosyalarının oluşturulamaması

Uygulama ve yükleyici dosyaları aşağıdaki durumlarda oluşturulamaz:

• Uygulama kimliği dizesinin uzunluğunun hatalı olması veya kullanılan karakterlerin geçersiz olması durumunda.

Uygulama kimliği dizesi 1 ila 212 karakterden oluşabilir ve aşağıdaki karakterleri içerebilir: 0-9, a-z, A-Z, . (nokta),

- (tire).

• Yükleyici listesinde bulunan dosyaların var olmaması durumunda.

• Özel simge dosyalarının boyutlarının hatalı olması durumunda.

• AIR hedef klasörünün yazma erişimine sahip olmaması durumunda.

• Uygulamayı imzalamamış olmanız veya daha sonra imzalanacak bir Adobe AIRI uygulaması olduğunu

belirtmemiş olmanız durumunda.

Özel bir uygulama tanımlayıcı dosyası oluşturma

Uygulama tanımlayıcı dosyası bir metin düzenleyici ile düzenleyebileceğiniz bir XML dosyasıdır. Özel bir uygulama

tanımlayıcı dosyası oluşturmak için istediğiniz değerleri belirtmek için değerleri düzenleyin. Varsayılan değerler şu

şekildedir:

• id = com.adobe.example.swfadı

• fileName = swfadı

• name = swfadı

• version = 1.0

• description = blank

• copyright = blank

• initialWindow

• title = name

• content = swfadı.swf

• systemChrome = standard, type = normal

• transparent = false

• visible = true

• icon

• image128x128 = icons/AIRApp_128.png

• image48x48 = icons/AIRApp_48.png

• image32x32 = icons/AIRApp_32.png

• image16x16 = icons/AIRApp_16.png

• customUpdateUI = false

• allowBrowserInvocation = false

Uygulama tanımlayıcı dosyası ile ilgili daha fazla bilgi için, bkz. “AIR uygulamasının özelliklerini ayarlama”

sayfa 41.

Page 28: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

21ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

Uygulamanızı imzalama

Tüm Adobe AIR uygulamalarının başka bir sisteme yüklenebilmesi için imzalanmış olması gerekir. Ancak Flash

uygulamanın daha sonra imzalanabilmesi için imzalanmamış Adobe AIR yükleyici dosyaları oluşturmanıza da olanak

tanır. Bu imzalanmamış Adobe AIR yükleyici dosyalarına AIRI paketi adı verilir. Bu özellik sertifika başka bir

bilgisayarda olduğunda veya imzalama işlemi uygulama geliştirme işleminden ayrı olarak yapıldığı durumlarda

kullanılmaya yöneliktir.

Bir kök sertifika yetkilisinden önceden satın alınmış dijital bir sertifika ile bir Adobe AIR uygulamasını imzalama

1 AIR - Uygulama ve Yükleyici Ayarları iletişim kutusunda bulunan Dijital İmza Ayarla düğmesini tıklatın. Dijital

İmza iletişim kutusu açılır.

İletişim kutusunda Adobe AIR uygulamanızı dijital bir sertifika ile imzalamanızı veya bir AIRI paketi hazırlamanızı

sağlayan iki seçenek düğmesi bulunur. AIR uygulamanızı imzalarsanız, bir kök sertifika yetkilisi tarafından verilmiş

olan bir dijital sertifikayı kullanabilir veya kendinden imzalı bir sertifika oluşturabilirsiniz. Kendinden imzalı bir

sertifika oluşturmak kolaydır, ancak bir kök sertifika yetkilisi tarafından verilen bir sertifika kadar güvenilir

değildir.

Bir AIR uygulamasını imzalamak için kullanılan Dijital İmza iletişim kutusu

2 Açılır menüden bir sertifika dosyası seçin veya bir sertifika dosyasını bulmak için Gözat düğmesini tıklatın.

3 Sertifikayı seçin.

4 Bir şifre girin.

5 Tamam'ı tıklatın.

AIR uygulamanızı imzalama hakkında daha fazla bilgi için bkz. “AIR dosyasını dijital olarak imzalama” sayfa 284.

Kendinden imzalı bir dijital sertifika oluşturma

1 Oluştur düğmesini tıklatın. Kendinden İmzalı Dijital Sertifika iletişim kutusu açılır.

2 Yayıncı adı, Birim, Kurum adı, Ülke, Şifre ve Şifreyi Onaylayın bilgilerini tamamlayın.

3 Sertifika türünü belirtin.

Tür seçeneği sertifikanın sahip olacağı güvenlik düzeyini belirlemenizi sağlar: 1024-RSA, 1024-bit anahtar (daha az

güvenli) kullanırken 2048-rsa, 2048-bit anahtar kullanır (daha güvenli).

4 Farklı Kaydet girişini tamamlayarak veya bir klasör konumuna göz atmak için Gözat düğmesini tıklatarak bilgiyi

bir sertifika dosyası içine kaydedin.

Page 29: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

22ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Flash CS3 Professional için Adobe AIR Güncellemesi

5 Tamam'ı tıklatın.

6 Dijital İmza iletişim kutusunda bu yordamın ikinci adımında atadığınız şifreyi girin ve Tamam'ı tıklatın.

Bir dijital sertifika belirledikten sonra, Ayarla düğmesi Değiştir düğmesine dönüşür.

Bu oturum için kullandığınız şifrenin Flash uygulaması tarafından hatırlanmasını istiyorsanız Bu Oturum için Şifreyi

Anımsa seçeneğini tıklatın.

Tamam'ı tıklattığınızda Zaman Damgası seçeneği belirlenmemişse dijital sertifikanın süresi dolduğunda uygulamanın

yüklenmeyeceğini belirten bir uyarı iletişim kutusu açılır. Bu uyarıya yanıt olarak Evet seçeneğini tıklatırsanız zaman

bilgisi devre dışı bırakılır. Hayır seçeneğini tıklatırsanız Zaman Damgası seçeneği otomatik olarak seçilir ve zaman

damgası özelliği etkin hale gelir.

Kendinden imzalı bir dijital sertifika oluşturma ile ilgili daha fazla bilgi için, bkz. “AIR dosyasını dijital olarak

imzalama” sayfa 284.

Ayrıca dijital imza kullanmadan bir AIR Intermediate (AIRI) uygulaması da oluşturabilirsiniz. Ancak siz dijital imza

ekleyene kadar hiçbir kullanıcı uygulamayı masaüstüne yükleyemez.

Daha sonra imzalanacak bir AIRI paketi oluşturma

❖ Dijital İmza iletişim kutusunda Daha Sonra İmzalanacak Bir AIRI Paketi Hazırla'yı seçin ve Tamam'ı tıklatın.

Dijital imza durumu daha sonra imzalanacak bir AIRI paketi hazırlamayı seçtiğinizi gösterecek şekilde değişir ve

Ayarla düğmesi de Değiştir düğmesine dönüşür.

Page 30: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

23

Bölüm 7: AIR güvenliği

Bu başlık, AIR uygulamasını geliştirirken dikkate almanız gereken güvenlik sorunlarını tartışır.

AIR güvenlik temelleri

AIR uygulamaları, yerel uygulamalardaki kullanıcı ayrıcalıklarının aynılarıyla çalışır. Bu ayrıcalıklar genellikle

dosyaları okuma ve yazma, uygulamaları başlatma, ekranda çizim yapma ve ağla iletişim kurma gibi işletim sistemi

özelliklerine kapsamlı erişim sağlar. Yerel uygulamalarda geçerli olan kullanıcıya özgü ayrıcalıklar gibi işletim sistemi

kısıtlamaları, aynı şekilde AIR uygulamalarında da geçerlidir.

Adobe® AIR™ güvenlik modeli, Adobe® Flash® Player güvenlik modelinin evrilmiş bir hali olsa da, güvenlik sözleşmesi

tarayıcıdaki içeriğe uygulanan güvenlik sözleşmesinden farklıdır. Bu sözleşme, geliştiricilere tarayıcı tabanlı

uygulamalar için alışılmadık özgürlükler ile zengin deneyimler sağlayan kapsamlı işlevlerin güvenli yollarını sunar.

Çalışma zamanının bellek yönetimi sağlayabilmesi için, AIR uygulamaları, derlenmiş bayt kodu (SWF içeriği) veya

yorumlanmış komut dosyası (JavaScript, HTML) kullanılarak yazılır. Bu, AIR uygulamalarının arabellek taşması ve

bellek bozulması gibi bellek yönetimiyle ilişkili güvenlik açıklarından etkilenme olasılığını en aza indirir. Bunlar, yerel

kodda yazılan masaüstü uygulamalarını etkileyen en yaygın güvenlik açıklarından bazılarıdır.

Yükleme ve güncellemeler

AIR uygulamaları, air uzantısını kullanan AIR yükleyici dosyaları yoluyla dağıtılır. Adobe AIR yüklendiğinde ve bir

AIR yükleyici dosyası açıldığında, çalışma zamanı yükleme işlemini yönetir.

Not: Geliştiriciler bir sürüm, uygulama adı ve yayıncı kaynağı belirtebilir, ancak ilk uygulama yükleme iş akışının

kendisi değiştirilemez. Tüm AIR uygulamaları çalışma zamanı tarafından yönetilen güvenli, düzene koyulmuş ve tutarlı

bir yükleme yordamını paylaştığından, bu kısıtlama kullanıcılar için avantajlıdır. Uygulama özelleştirmesi gerekliyse,

uygulama ilk yürütüldüğünde sağlanabilir.

Çalışma zamanı yükleme konumu

SWF dosyalarının Flash Player tarayıcı eklentisinin yüklenmesini gerektirdiği gibi, AIR uygulamaları da kullanıcının

bilgisayarında önce çalışma zamanının yüklenmesini gerektirir.

Çalışma zamanı, kullanıcının bilgisayarında aşağıdaki konuma yüklenir:

• Mac OS: /Library/Frameworks/

• Windows: C:\Program Files\Common Files\Adobe AI

Mac OS'de uygulamanın güncellenmiş bir sürümünü yüklemek için, kullanıcının uygulama dizinine yükemek için

yeterli sistem ayrıcalıklarına sahip olması gerekir. Windows'ta, kullanıcının yönetici ayrıcalıklarına sahip olması

gerekir.

Çalışma zamanı iki şekilde yüklenebilir: kesintisiz yükleme özelliğini kullanarak (doğrudan bir web tarayıcısından

yükleme) veya elle yükleme yoluyla. Daha fazla bilgi için bkz. “AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma”

sayfa 275.

Page 31: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

24ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Kesintisiz yükleme (çalışma zamanı ve uygulama)

Kesintisiz yükleme özelliği, geliştiricilere Adobe AIR'i henüz yüklememiş kullanıcılar için düzenlenmiş bir yükleme

deneyimi sağlar. Kesintisiz yükleme yönteminde geliştirici, yüklemeye ilişkin uygulamayı sunan bir SWF dosyası

oluşturur. Kullanıcı uygulamayı yüklemek için SWF dosyasını tıklattığında, SWF dosyası çalışma zamanını saptamaya

çalışır. Çalışma zamanı saptanamazsa, yüklenir ve hemen geliştirici uygulamasına ilişkin yükleme işlemiyle

etkinleştirilir.

Elle yükleme

Alternatif olarak, kullanıcı AIR dosyasını açmadan önce çalışma zamanını elle indirip yükleyebilir. Daha sonra

geliştirici AIR dosyasını farklı şekillerde dağıtabilir (örneğin, e-posta veya bir web sitesindeki HTML linki yoluyla).

AIR dosyası açıldığında, çalışma zamanı uygulama yüklemesini işlemeye başlar.

Bu işlem hakkında daha fazla bilgi için bkz. “AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma” sayfa 275

Uygulama yükleme akışı

AIR güvenlik modeli, kullanıcıların AIR uygulamasının yüklenip yüklenmeyeceğine karar vermelerine olanak tanır.

AIR yükleme deneyimi, kullanıcıların güvenle ilgili bu kararı daha kolay vermelerini sağlayan yerel uygulama yükleme

teknolojilerinin üzerinde çeşitli iyileştirmeler sağlar.

• Çalışma zamanı, AIR uygulaması bir web tarayıcısındaki linkten yüklendiğinde bile, tüm işletim sistemlerinde

tutarlı bir yükleme deneyimi sağlar. Çoğu yerel uygulama yükleme deneyimi, güvenlik bilgisi sağlıyorsa bile, bunu

tarayıcıya veya diğer uygulamalara bağlı olarak sağlar.

• AIR uygulaması yükleme deneyimi, uygulamanın kaynağını ve uygulamanın hangi ayrıcalıkları kullanabileceğine

ilişkin bilgiyi tanımlar (kullanıcı yüklemenin ilerlemesine izin verirse).

• Çalışma zamanı, AIR uygulamasının yükleme işlemini yönetir. AIR uygulaması, çalışma zamanının kullandığı

yükleme işlemini değiştiremez.

Genellikle, kullanıcılar güvenmedikleri veya doğrulanamayan bir kaynaktan gelen masaüstü uygulamalarını

yüklememelidir. Yerel uygulamalara ilişkin güvenlik kanıtının zorluğu, diğer yüklenebilir uygulamalar için olduğu

gibi, AIR uygulamaları için de aynı şekilde geçerlidir.

Uygulama hedefi

Yükleme dizini, aşağıdaki seçeneklerden biri kullanılarak ayarlanabilir:

1 Kullanıcı, yükleme sırasında hedefi özelleştirebilir. Uygulama, kullanıcının belirttiği yere yüklenir.

2 Kullanıcı yükleme hedefini değiştirmezse, uygulama çalışma zamanı tarafından belirlenen varsayılan yola yüklenir:

• Mac OS: ~/Uygulamalar/

• Windows XP ve öncesi: C:\Program Dosyaları\

• Windows Vista: ~/Apps/

Geliştirici uygulama tanımlayıcı dosyasında bir installFolder ayarı belirlerse, uygulama bu dizinin bir alt yoluna

yüklenir.

Page 32: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

25ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

AIR dosya sistemi

AIR uygulamaları için yükleme işlemi, geliştiricinin AIR yükleyici dosyasına dahil ettiği tüm dosyaları kullanıcının

yerel bilgisayarına kopyalar. Yüklenen uygulama şunlardan oluşur:

• Windows: AIR yükleyici dosyasında bulunan tüm dosyaları içeren bir dizin. Çalışma zamanı AIR uygulamasının

yüklenmesi sırasında bir exe dosyası da oluşturur.

• Mac OS: AIR yükleyici dosyasının tüm içeriğini içeren bir app dosyası. Bu, Finder'daki "Paket İçeriğini Göster"

seçeneği kullanılarak denetlenebilir. Çalışma zamanı, bu app dosyasını AIR uygulaması yüklemesinin bir parçası

olarak oluşturur.

AIR uygulaması şu şekilde çalıştırılır:

• Windows: Yükleme klasöründeki .exe dosyasını veya bu dosyaya karşılık gelen bir kısayolu çalıştırarak (Başlangıç

Menüsü veya masaüstündeki bir kısayol gibi).

• Mac OS: .app dosyasını veya bunu işaret eden bir takma adı çalıştırarak.

Uygulama dosya sistemi, uygulama işleviyle ilişkili alt dizinler de içerir. Örneğin, şifrelenmiş yerel depoya yazılmış

bilgi, uygulamanın uygulama kimliğine göre adlandırılan dizindeki bir alt dizine kaydedilir.

AIR uygulama depolaması

AIR uygulamaları, kullanıcının sabit sürücüsündeki herhangi bir konuma yazma ayrıcalığına sahiptir; ancak,

geliştiriciler uygulamalarına ilişkin yerel depo için app-storage:/ yolunu kullanmaya teşvik edilir. Uygulamadan

app-storage:/ konumuna yazılan dosyalar, kullanıcının işletim sistemine bağlı standart bir konumda

konumlandırılır.

• Mac OS'de: <appData> kullanıcının “tercihler klasörü”, genellikle

/Kullanıcılar/<user>/Kitaplık/Tercihler olduğunda, uygulamanın depolama dizini

<appData>/<appId>/Yerel Depo/ olur.

• Windows'ta: <appData> kullanıcının CSIDL_APPDATA “Özel Klasör”ü, genellikle C:\Belgeler ve

Ayarlar\<userName>\Uygulama Verileri olduğunda, uygulamanın depolama dizini

<appData>\<appId>\Yerel Depo\ olur.

Uygulama depolama dizinine air.File.applicationStorageDirectory özelliği yoluyla erişebilirsiniz.

İçindekilere File sınıfının resolvePath() yöntemini kullanarak erişebilirsiniz. Ayrıntılar için bkz. “Dosya sistemiyle

çalışma” sayfa 97.

Adobe AIR'i güncelleme

Kullanıcı, çalışma zamanının güncellenmiş bir versiyonunu gerektiren bir AIR uygulaması yüklediğinde, çalışma

zamanı otomatik olarak gerekli çalışma zamanı güncellemesini yükler.

Kullanıcı, çalışma zamanını güncellemek için bilgisayara ilişkin yönetici ayrıcalıklarına sahip olmalıdır.

AIR uygulamalarını güncelleme

Yazılım güncellemelerinin geliştirilmesi ve konuşlandırılması, yerel kod uygulamalarının karşılaştığı en büyük

güvenlik sorunlarından biridir. AIR API, bu sorunu gidermek için bir mekanizma sağlar: başlatmadan sonra bir AIR

dosyası için uzak konumu kontrol etmek üzere Updater.update() yöntemi çağrılabilir. Güncelleme gerekliyse, AIR

dosyası indirilir, yüklenir ve uygulama yeniden başlatılır. Geliştiriciler bu sınıfı yalnızca yeni işlevler sağlamak için

değil, olası güvenlik açıklarına yanıt vermek için de kullanabilirler.

Page 33: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

26ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Not: Geliştiriciler, uygulama tanımlayıcı dosyasının version özelliğini ayarlayarak uygulamanın sürümünü

belirleyebilirler. AIR, sürüm dizesini hiçbir şekilde yorumlamaz. Bu nedenle, “3.0” sürümü “2.0 sürümünden daha yeni

bir sürüm olarak varsayılmaz.” Anlamlı bir sürüm oluşturma tutmak geliştiriciye bağlıdır. Ayrıntılar için bkz.

“Uygulama tanımlayıcı dosyasında özellikleri tanımlama” sayfa 42.

AIR uygulamasını kaldırma

Kullanıcı bir AIR uygulamasını kaldırabilir:

• Windows'ta: Uygulamayı kaldırmak için Program Ekle/Kaldır panelini kullanma.

• Mac OS'de: App dosyasını yükleme konumundan silme

AIR uygulamasının kaldırılması, uygulama dizinindeki tüm dosyaları kaldırır. Ancak, uygulamanın uygulama

dizininin dışına yazmış olabileceği dosyaları kaldırmaz. AIR uygulamalarının kaldırılması, AIR uygulamasının

uygulama dizininin dışındaki dosyalarda yaptığı değişiklikleri geri almaz.

Adobe AIR'i kaldırma

AIR şu şekilde kaldırılabilir:

• Windows'ta: Denetim Masası'ndan Program Ekle/Kaldır'ı çalıştırdıktan sonra Adobe AIR'i ve daha sonra “Kaldır”ı

seçerek.

• Mac OS'de: Uygulamalar dizinindeki Adobe AIR Uninstaller uygulamasını çalıştırarak.

Yöneticiler için Windows kayıt defteri ayarları

Windows'ta, yöneticiler bilgisayarı AIR uygulamasını ve çalışma zamanı güncellemelerini engelleyecek (veya bunlara

izin verecek) şekilde yapılandırabilir. Bu ayarlar, Windows kayıt defterinde aşağıdaki anahtarın altında bulunur:

HKLM\Yazılım\Politikalar\Adobe\AIR. Bunlar, aşağıdakileri içerir:

Sanal alanlar

AIR, izinleri AIR uygulamasındaki dahili ve harici her bir dosyaya göre tanımlayan kapsamlı bir güvenlik mimarisi

sağlar. İzinler, dosyalara kaynaklarına göre verilir ve sanal alan adı verilen mantıksal güvenlik gruplamalarına atanır.

AIR uygulaması sanal alanları hakkında

Sanal alanların çalışma zamanı güvenlik modeli, uygulama sanal alanı eklemesini içeren Flash Player güvenlik

modelinden oluşur. Uygulama sanal alanında olmayan dosyalar, Flash Player güvenlik modeli tarafından belirtilenlere

benzer güvenlik kısıtlamaları içerir.

Kayıt defteri ayarı Açıklama

AppInstallDisabled AIR uygulamasının yüklenebileceğini ve kaldırılabileceğini belirtir. “İzinli” için 0, “izinli değil” için 0 olarak

ayarlanır.

UntrustedAppInstallDisabled Güvenilmeyen AIR uygulamalarının (güvenilir bir sertifika içermeyen uygulamalar) yüklenmesine izin

verildiğini belirtir (bkz. “AIR dosyasını dijital olarak imzalama” sayfa 284). “İzinli” için 0, “izinli değil” için 0

olarak ayarlanır.

UpdateDisabled Çalışma zamanının arka plan görevi veya açık yüklemenin bir parçası olarak güncellenebileceğini belirtir.

“İzinli” için 0, “izinli değil” için 0 olarak ayarlanır.

Page 34: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

27ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Çalışma zamanı, kodun erişebileceği verilerin aralığını ve yürütebileceği işlemleri tanımlamak için bu güvenlik sanal

alanlarını kullanır. Yerel güvenliği sağlamak için, her bir sanal alandaki dosyalar diğer sanal alandaki dosyalardan

ayrılır. Örneğin, harici bir İnternet URL'sinden AIR uygulamasına yüklenen bir SWF dosyası uzak bir sanal alana

yerleştirilir ve varsayılan olarak uygulama dizininde yer alan, uygulama sanal alanına atanmış dosyalara komut dosyası

oluşturma iznine sahip değildir.

Aşağıdaki tablo tüm sanal alan türlerini açıklar:

Bu başlık, öncelikle uygulama sanal alanına ve uygulama sanal alanının AIR uygulamasındaki diğer sanal alanlarla

ilişkisine odaklanır. Diğer sanal alanlara atanan içeriği kullanan geliştiriciler, Flash Player güvenlik modeli hakkınaki

diğer belgeleri de okumalıdır. Bkz. ActionScript 3.0'ı Programlama

(http://www.adobe.com/go/flashCS3_progAS3_security_tr) belgesi ve Flash Player 9 Security belgesi

(http://www.adobe.com/go/fp9_0_security_tr) içindeki “Flash Player Security” bölümü.

Uygulama sanal alanı

Uygulama yüklendiğinde, AIR yükleyici dosyasında bulunan tüm dosyalar kullanıcının bilgisayarında bir uygulama

dizinine yüklenir. Geliştiriciler, koddaki bu dizine app:/ URL şeması (bkz. “URL'lerde AIR URL şemalarını kullanma”

sayfa 271) yoluyla başburabilir. Uygulama dizin ağacındaki tüm dosyalar, uygulama çalıştığında uygulama sanal

alanına atanır. Uygulama sanal alanındaki içerik, yerel dosya sistemiyle etkileşim dahil, bir AIR uygulamasının

kullanabileceği tüm ayrıcalıklarla donatılmıştır.

Çoğu AIR uygulaması, uygulamayı çalıştırmak için yalnızca yerel olarak yüklenen bu dosyaları kullanır. Ancak, AIR

uygulamaları yalnızca uygulama dizinindeki dosyalarla kısıtlanmamıştır - tüm kaynaklardan tüm dosya türlerini

yükleyebilir. Bu, kullanıcı bilgisayarındaki yerel dosyaların yanı sıra, yerel ağda ve İnternet'te bulunan kullanılabilir

harici kaynaklardaki dosyaları da içerir. Dosya türünün güvenlik kısıtlamaları üzerinde etkisi yoktur; yüklenen HTML

dosyaları, aynı kaynaktan yüklenen SWF dosyalarıyla aynı güvenlik ayrıcalıklarına sahiptir.

Uygulama güvenlik sanal alanındaki içerik, diğer sanal alanlardaki içeriğin kullanımının engellendiği AIR API'lerine

erişebilir. Örneğin, uygulamaya ilişkin uygulama tanımlayıcı dosyasının içeriğini döndüren

air.NativeApplication.nativeApplication.applicationDescriptor özelliği, uygulama güvenlik sanal

alanındaki içerikle kısıtlanmıştır. Başka bir kısıtlanmış API örneği, yerel dosya sistemine okuma ve yazma için

yöntemler içeren FileStream sınıfıdır.

Yalnızca uygulama güvenlik sanal alanındaki içerik tarafından kullanılabilen ActionScript API'leri Adobe AIR için

ActionScript 3.0 Dil Başvurusu içinde AIR logosuyla gösterilir. Bu API'lerin diğer sanal alanlarda kullanılması, çalışma

zamanının SecurityError istisnası atmasına neden olur.

Sanal alan Açıklama

uygulama Dosya uygulama dizininde yer alır ve tüm AIR ayrıcalıkları kümesiyle çalışır.

uzak Dosya, bir İnternet URL'sindendir ve Flash Player'daki uzak dosyalara uygulanan kurallara benzeyen etki

alanına dayalı sanal alan kurallarına göre çalışır. (Her ağ etki alanı için http://www.example.com and

https://foo.example.org gibi ayrı uzak sanal alanlar mevcuttur.)

yerel-güvenli Dosya, yerel bir dosyadır ve kullanıcı bu dosyayı Ayar Yöneticisi veya Flash Player yapılandırma dosyasını

kullanarak güvenilir olarak belirlemiştir. Dosya yerel veri kaynaklarını okuyabilir ve İnternet'le iletişim

kurabilir, ancak tüm AIR ayrıcalıkları kümesine sahip değildir.

ağ iletişimiyle yerel Dosya, ağ hedefiyle yayınlanmış yerel bir SWF dosyasıdır, ancak kullanıcı tarafından açık olarak

güvenilmez. Dosya, İnternet'le iletişim kurabilir, ancak yerel veri kaynaklarını okuyamaz. Bu sanal alan,

yalnızca SWF içeriği tarafından kullanılabilir.

dosya sistemiyle yerel Dosya, ağ hedefiyle yayınlanmamış yerel bir komut dosyasıdır ve kullanıcı tarafından açık olarak

güvenilmez. Bu, güvenilmeyen JavaScript dosyaları içerir. Dosya yerel veri kaynaklarını okuyabilir, ancak

İnternet'le iletişim kuramaz.

Page 35: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

28ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

HTML içeriği (HTMLLoader nesnesindeki), tüm AIR JavaScript API'leri (AIRAliases.js dosyasının kullanımı

sırasında window.runtime özelliği veya air nesnesi yoluyla kullanılabilen) uygulama güvenlik sanal alanındaki içerik

tarafından kullanılabilir. Başka bir sanal alandaki HTML içeriği window.runtime özelliğine erişime sahip değildir, bu

nedenle bu içerik AIR API'lerine erişemez.

JavaScript ve HTML kısıtlamaları

Uygulama güvenlik sanal alanındaki HTML içeriği için, kod yüklendikten sonra dizeleri dinamik olarak yürütülebilir

koda dönüştürebilen API'lerin kullanımına ilişkin sınırlamalar mevcuttur. Bunun amacı, uygulamanın yanlışlıkla

uygulama dışı kaynaklardan (güvenli olmayabilecek ağ etki alanları gibi) kod yerleştirmesini (ve yürütmesini)

engellemektir. Bir örnek, eval() işlevi kullanımıdır. Ayrıntılar için bkz. “Farklı sanal alanlardaki içerik için kod

kısıtlamaları” sayfa 31.

ActionScript metin alanı içeriğindeki img etiketlerindeki kısıtlamalar

Olası kimlik avı saldırılarını önlemek için, uygulama güvenlik sanal alanında yer alan SWF içeriğindeki ActionScript

TextField nesnelerinde bulunan HTML içeriğinde img etiketleri yoksayılır.

Asfunction kısıtlamaları

Uygulama sanal alanındaki içerik, ActionScript 2.0 metin alanlarındaki HTML içeriğinde asfunction protokolünü

kullanamaz.

Etki alanları arası kalıcı önbelleğe erişim yok

Uygulama sanal alanındaki SWF içeriği, Flash Player 9 Update 3'e eklenmiş bir özellik olan etki alanları arası önbelleği

kullanamaz. Bu özellik, Flash Player'ın Adobe platform bileşen içeriğini kalıcı olarak önbelleğe almasını ve bu içeriği

talep üzerine yüklenen SWF içeriğinde yeniden kullanmasını sağlar (içeriğin birçok kez yüklenme ihtiyacını ortadan

kaldırır).

Uygulama dışı sanal alanlardaki içeriğin ayrıcalıkları

Ağdan veya İnternet'ten yüklenen dosyalar, uzak sanal alana atanır. Uygulama dizininin dışından yüklenen dosyalar

dosya sistemiyle yerel, a� ileti�imiyle yerel veya yerel-güvenilir sanal alana atanır; bu dosyanın nasıl

oluşturulduğuna ve kullanıcının Flash Player Global Ayarları Yöneticisi yoluyla dosyaya açık olarak güvenip

güvenmediğine bağlıdır. Ayrıntılar için bkz.

http://www.macromedia.com/support/documentation/tr/flashplayer/help/settings_manager.html.

JavaScript ve HTML kısıtlamaları

Uygulama güvenlik sanal alanındaki içerikten farklı olarak, uygulama dışı bir güvenlik sanal alanında yer alan

JavaScript içeriği, dinamik olarak oluşturulan kodu yürütmek için her zaman eval() işlevini çağırabilir . Ancak,

uygulama dışı güvenlik sanal alanında JavaScript için kısıtlamalar mevcuttur. Bunlar:

• Uygulama dışı sanal alandaki JavaScript kodunun window.runtime nesnesine erişimi yoktur, ve aynı şekilde bu

kod AIR API'lerini yürütemez.

• Varsayılan olarak, uygulama dışı güvenlik sanal alanındaki içerik, isteği çağıran etki alanı dışındaki etki

alanlarından veri yüklemek için XMLHttpRequest çağrılarını kullanamaz. Ancak, uygulama kodu mevcut karede

veya iframe'de allowCrossdomainXHR niteliğini ayarlayarak uygulama dışı içeriğe bunu yapması için izin verebilir.

Daha fazla bilgi için bkz. “Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma” sayfa 34.

• JavaScript window.open() yönteminin çağrılmasına ilişkin kısıtlamalar mevcuttur. Ayrıntılar için bkz. “JavaScript

window.open() yönteminin çağrılmasına ilişkin kısıtlamalar” sayfa 33.

Ayrıntılar için bkz. “Farklı sanal alanlardaki içerik için kod kısıtlamaları” sayfa 31.

Page 36: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

29ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

CSS, kare, iframe ve img öğelerinin yüklenmesine ilişkin kısıtlamalar

Uzak (ağ) güvenlik sanal alanlarındaki HTML içeriği uzak etki alanlarından (ağ URL'lerinden) yalnızca kare, iframe

ve img içeriği yükleyebilir.

Dosya sistemiyle yerel, ağ iletişimiyle yerel veya yerel-güvenilir sanal alanlardaki HTML içeriği yerel sanal alanlardan

(uygulamadan veya ağ URL'lerinden değil) yalnızca kare, iframe ve img içeriğini okuyabilir.

HTML güvenliği

Çalışma zamanı, HTML ve JavaScript'teki olası güvenlik açıklarının üstesinden gelmek için kurallar uygular ve

mekanizmalar sağlar. Uygulamanız temel olarak JavaScript'te yazılmış olduğunda veya HTML ve JavaScript içeriğini

SWF tabanlı bir uygulamaya yüklediğinizde aynı kurallar uygulanır. Uygulama sanal alanında ve uygulama dışı

güvenlik sanal alanındaki içerik (bkz. “Sanal alanlar” sayfa 26) farklı ayrıcalıklara sahiptir. Iframe'e veya kareye içerik

yüklenirken, çalışma zamanı, karedeki veya iframe'deki içeriğin uygulama güvenlik sanal alanındaki içerikle güvenli

biçimde iletişim kurmasını sağlayan güvenli bir sanal alan köprüsü mekanizması sağlar.

Bu başlık, AIR HTML güvenlik mimarisini ve uygulamanızı kurmak için iframe'lerin, çerçevelerin ve sanal alan

köprüsünün nasıl kullanılacağını açıklar.

Daha fazla bilgi için bkz. “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 207.

HTML tabanlı uygulamanızın yapılandırılmasına genel bakış

Çerçeveler ve iframe'ler, AIR'de HTML içeriğinin düzenlenmesi için uygun bir yapı sağlar. Çerçeveler, hem veri

kalıcılığını korumak hem de uzak içerikle güvenli bir şekilde çalışmak için yollar sağlar.

AIR'de HTML, normal, sayfa tabanlı düzenini koruduğundan, HTML içeriğinizin üst karesi farklı bir sayfaya

“geçtiğinde” HTML ortamı tamamen yenilenir. Kareleri ve iframe'leri, tarayıcıda çalışan bir web uygulaması için

yapacağınız gibi veri kalıcılığını korumak amacıyla kullanabilirsiniz. Üst karede ana uygulama nesnelerinizi

tanımladığınızda, bu nesneler karenin yeni bir sayfaya geçmesine izin vermediğiniz sürece korunur. Uygulamanın

geçici bölümlerini yüklemek ve görüntülemek için alt kareleri ve iframe'leri kullanın. (Veri kalıcılığını korumak için

karelerin yanı sıra veya karelerin yerine kullanılabilecek çeşitli yollar mevcuttur. Bunlar tanımlama bilgilerini, yerel

paylaşılan nesneleri, yerel dosya deposunu, şifrelenmiş dosya deposunu ve yerel veritabanı deposunu içerir.)

AIR'de HTML, yürütülebilir kod ve veriler arasındaki normal, bulanık çizgisini korur. Bu nedenle AIR, HTML

ortamının üst karesindeki içeriği uygulama sanal alanına yerleştirir ve bir metin dizesini yürütülebilir bir nesneye

dönüştürebilen eval() gibi tüm işlemleri kısıtlar. Bu kısıtlama, uygulama uzak içerik yüklemediğinde bile uygulanır.

AIR'deki uzak HTML içeriğiyle güvenli bir biçimde çalışmak için kareleri ve iframe'leri kullanmalısınız. Uzak içerik

yüklemediğinizde bile, içeriğin eval() kısıtlaması olmadan çalışabilmesi için içeriği sanal alandaki alt karede

çalıştırmanız daha uygun olabilir. (Bazı JavaScript uygulama çerçevelerini kullanırken sanal alana yerleştirme işlemi

gerekli olabilir.) Uygulama sanal alanındaki JavaScript kısıtlamalarının tam listesi için bkz. “Farklı sanal alanlardaki

içerik için kod kısıtlamaları” sayfa 31.

AIR'de HTML uzak, büyük olasılıkla güvenli olmayan içerik yükleme özelliğini koruduğundan, AIR, bir etki

alanındaki içeriğin farklı bir etki alanındaki içerikle etkileşime girmesini engelleyen aynı kaynak politikasını uygular.

Uygulama içeriği ve farklı etki alanındaki içerik arasında etkileşime izin vermek için, üst ve alt kare arasında arabirim

olarak görev yapacak bir köprü kurabilirsiniz.

Üst-alt sanal alan ilişkisini kurma

AIR, HTML kare ve iframe öğelerine sandboxRoot ve documentRoot niteliklerini ekler. Bu nitelikler, uygulama

içeriğini başka bir etki alanından gelmiş gibi ele almanızı sağlar:

Page 37: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

30ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Aşağıdaki örnek, uygulamanın sanal alan alt dizinine yüklenen içeriği uzak sanal alanda ve www.example.com etki

alanında çalışacak biçimde eşler:

<iframe src="ui.html" sandboxRoot="http://www.example.com/local/" documentRoot="app:/sandbox/"> </iframe>

Farklı sanal alanlarda veya etki alanlarında üst ve alt kareler arasında köprü kurma

AIR, her alt karenin window nesnesine childSandboxBridge ve parentSandboxBridge özelliklerini ekler. Bu

özellikler, üst ve alt kare arasında arabirim olarak görev yapacak köprüleri tanımlamanızı sağlar. Her köprü bir yöne

gider:

childSandboxBridge — childSandboxBridge özelliği alt karenin üst karedeki içeriğe bir arabirim göstermesini

sağlar. Arabirim göstermek için childSandbox özelliğini alt karedeki bir işleme veya nesneye ayarlarsınız. Böylece

nesneye veya işleve üst karedeki içerikten erişebilirsiniz. Aşağıdaki örnek, alt karede çalışan bir komut dosyasının bir

işlev ve bir özellik içeren nesneyi üst öğesine nasıl gösterdiğini açıklar:

var interface = {}; interface.calculatePrice = function(){ return .45 + 1.20; } interface.storeID = "abc" window.childSandboxBridge = interface;

Bu alt içerik, "alt"kimli�i atanmış bir iframe içindeyse, karenin childSandboxBridge özelliğini okuyarak üst

içerikten arabirime erişebilirsiniz:

var childInterface = document.getElementById("child").childSandboxBridge; air.trace(childInterface.calculatePrice()); //traces "1.65" air.trace(childInterface.storeID)); //traces "abc"

parentSandboxBridge — parentSandboxBridge özelliği üst karenin alt karedeki içeriğe bir arabirim göstermesini

sağlar. Arabirim göstermek için alt karenin parentSandbox özelliğini üst karedeki bir işleve veya bir nesneye

ayarlarsınız. Böylece nesneye veya işleve alt karedeki içerikten erişebilirsiniz. Aşağıdaki örnek, üst karede çalışan bir

komut dosyasının saklama işlevi içeren bir nesneyi alt öğeye nasıl gösterdiğini açıklar:

var interface = {}; interface.save = function(text){ var saveFile = air.File("app-storage:/save.txt"); //write text to file } document.getElementById("child").parentSandboxBridge = interface;

Alt karedeki içerik, bu arabirimi kullanarak save.txt adlı dosyaya metin kaydedebilir. Ancak, dosya sistemine başka bir

erişimi olmayacaktır. Genellikle, uygulama içeriği diğer sanal alanlara olanaklı en dar arabirimi göstermelidir. Alt

içerik saklama işlevini aşağıdaki şekilde çağırabilir:

var textToSave = "A string."; window.parentSandboxBridge.save(textToSave);

Nitelik Açıklama

sandboxRoot Kare içeriğinin yerleştirileceği sanal alan ve etki alanını belirlemek için kullanılacak URL. URL şemasının kullanması

gereken file:, http: veya https:.

documentRoot Kare içeriğinin yükleneceği kaynak URL. URL şemasının kullanması gereken file:, app: veya app-storage:.

Page 38: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

31ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Alt içerik parentSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma zamanı bir SecurityError

istisnası atar. Üst içerik childSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma zamanı bir

SecurityError istisnası atar.

Farklı sanal alanlardaki içerik için kod kısıtlamaları

Bu “HTML güvenliği” sayfa 29 başlığında tartışıldığı gibi, çalışma zamanı HTML ve JavaScript'teki olası güvenlik

açıklarının üstesinden gelebilmek için kurallar uygular ve mekanizmalar sağlar. Bu başlık, bu kısıtlamaları listeler.

Kod, bu kısıtlanmış API'leri çağırmaya çalıştığında, çalışma zamanı “Uygulama güvenlik sanal alanındaki JavaScript

kodu için Adobe AIR çalışma zamanı güvenlik ihlali” mesajını içeren bir hata verir.

Daha fazla bilgi için bkz. “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 207.

JavaScript eval() işlevi ve benzer tekniklerin kullanımındaki kısıtlamalar

Uygulama güvenlik sanal alanındaki HTML içeriği için, kod yüklendiken sonra (body öğesinin onload olayı

gönderildikten ve onload işleyici işlevinin yürütülmesi tamamlandıktan sonra) dizeleri dinamik olarak yürütülebilir

koda dönüştürebilen API'lerin kullanımı için sınırlamalar mevcuttur. Bunun amacı, uygulamanın yanlışlıkla

uygulama dışı kaynaklardan (güvenli olmayabilecek ağ etki alanları gibi) kod yerleştirmesini (ve yürütmesini)

engellemektir.

Örneğin, uygulamanız DOM öğesinin innerHTML özelliğine yazmak için uzak bir kaynaktan dize verileri

kullanıyorsa, dize güvenli olmayan işlemler gerçekleştirebilecek yürütülebilir (JavaScript) kod içerebilir. Ancak, içerik

yüklenirken uzak dizelerin DOM'a eklenme riski yoktur.

JavaScript eval() işlevinin kullanımında bir kısıtlama vardır. Uygulama sanal alanındaki kod yüklendikten ve onload

olay işleyicisindeki işlemeden sonra eval() işlevini sınırlı biçimde kullanabilirsiniz. Aşağıdaki kurallar, kodun

uygulama güvenlik sanal alanından yüklenmesinden sonraeval() işlevinin kullanımı için geçerlidir:

• Değişmez içeren ifadeler izinli. Örneğin:

eval("null"); eval("3 + .14"); eval("'foo'");

• Aşağıdaki gibi nesne değişmezleri izinlidir:

{ prop1: val1, prop2: val2 }

• Aşağıdaki gibi nesne değişmezi ayarlayıcı/alıcıları izinli değildir:

{ get prop1() { ... }, set prop1(v) { ... } }

• Aşağıdaki gibi dizi değişmezleri izinlidir:

[ val1, val2, val3 ]

• Aşağıdaki gibi özellik okumaları içeren ifadeler izinli değildir:

a.b.c

• İşlev başlatma izinli değil.

• İşlev tanımları izinli değil.

• Özellik ayarlama izinli değil.

• İşlev değişmezleri izinli değil.

Ancak, kod yüklenirken, onload olayından önce ve onload olay işleyici işlevinin yürütülmesi sırasında bu kısıtlamalar

uygulama güvenlik sanal alanındaki içeriğe uygulanmaz.

Page 39: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

32ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Örneğin, kod yüklendikten sonra istisna atan çalışma zamanı aşağıdaki kodla sonuçlanır:

eval("alert(44)"); eval("myFunction(44)"); eval("NativeApplication.applicationID");

Örneğin eval() işlevini çağırma sırasında yapılan gibi dinamik olarak oluşturulan kod, uygulama sanal alanında

izinliyse bir güvenlik riski ortaya çıkarır. Örneğin, bir uygulama yanlışlıkla ağ etki alanından yüklenmiş bir dizeyi

yürütebilir ve bu dize kötü amaçlı bir kod içerebilir. Örneğin, bu kod kullanıcının bilgisayarındaki dosyaları değiştiren

veya silen bir kod olabilir. Veya yerel dosyanın içeriğini güvenilir olmayan bir ağ etki alanına bildiren bir kod olabilir.

Dinamik kod oluşturma yolları şunlardır:

• eval() işlevini çağırma.

• Uygulama dizininin dışındaki bir komut dosyasını yükleyen komut dosyası etiketleri eklemek için innerHTML

özelliklerini veya DOM işlevlerini kullanma.

• Satır içi kod içeren komut dosyası etikeleri eklemek için innerHTML özelliklerini veya DOM işlevlerini kullanma

(src niteliği yoluyla komut dosyası yüklemek yerine).

• Uygulama dizininin dışıda yer alan bir JavaScript dosyası yüklemek üzere script etiketleri için src niteliğini

ayarlama.

• Javascript URL şemasını kullama (href="javascript:alert('Test')" için olduğu gibi).

• İlk parametre (işlevin senkronize olmayan bir şekilde çalışacağını tanımlayan) işlev adı (setTimeout('x = 4',

1000) gibi) yerine bir dize (değerlendirilecek) olduğunda setInterval() veya setTimout() işlevini kullanma.

• document.write() veya document.writeln() çağırma.

Uygulama güvenlik sanal alanındaki kod, içerik yüklenirken yalnızca bu yöntemleri kullanabilir.

Bu kısıtlamalar, JSON nesne değişmezleriyle eval() işlevinin kullanılmasını engellemez. Bu, uygulama içeriğinizin

JSON JavaScript kitaplığıyla çalışmasını sağlar. Ancak, aşırı yüklü JSON kodu kullanımınız kısıtlanmıştır (olay

işleyicileriyle).

Diğer Ajax çerçeveleri ve JavaScript kod kitaplıkları için, çerçevedeki veya kitaplıktaki kodun dinamik olarak

oluşturulan kodlara ilişkin bu kısıtlamalarla çalışıp çalışmadığını kontrol edin. Çalışmıyorsa, uygulama dışı güvenlik

sanal alanına çerçeveyi veya kitaplığı kullanan içerik dahil edin. Ayrıntılar için bkz. “Uygulama dışı sanal alanlardaki

içeriğin ayrıcalıkları” sayfa 28 ve “Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma”

sayfa 38. Adobe, http://www.adobe.com/products/air/develop/ajax/features/ linklerinde uygulama güvenlik sanal

alanını desteklemek için bilinen Ajax çerçevelerinin listesini tutar.

Uygulama güvenlik sanal alanındaki içerikten farklı olarak, uygulama dışı bir güvenlik sanal alanında yer alan

JavaScript içeriği, dinamik olarak oluşturulan kodu yürütmek için her zaman eval() işlevini çağırabilir .

AIR API'lerine erişim sınırlamaları (uygulama dışı sanal alanlar için)

Uygulama dışı sanal alandaki JavaScript kodunun window.runtime nesnesine erişimi yoktur, ve aynı şekilde bu kod

AIR API'lerini yürütemez. Uygulama dışı güvenlik sanal alanındaki içerik aşağıdaki kodu çağırdığında, uygulama bir

TypeError istisnası atar:

try { window.runtime.flash.system.NativeApplication.nativeApplication.exit(); } catch (e) { alert(e); }

Page 40: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

33ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Uygulama dışı sanal alandaki içerik window.runtime nesnesini tanımadığından, istisna TypeError (tanımlanmamış

değer) türündedir, bu nedenle tanımlanmamış bir değer olarak görülür.

Uygulama dışı sanal alandaki içeriğe komut dosyası köprüsünü kullanarak çalışma zamanı işlevi gösterebilirsiniz.

Ayrıntılar için bkz. “Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma” sayfa 38.

XMLHttpRequest çağrılarının kullanımına ilişkin kısıtlamalar

Uygulama güvenlik sanal alanındaki HTML içeriği, HTML içeriği yüklenirken ve onLoad olayı sırasında uygulama

sanal alanının dışından veri yüklemek için senkronize XMLHttpRequest yöntemini kullanamaz.

Varsayılan olarak, uygulama dışı güvenlik sanal alanlarındaki HTML içeriği, isteği çağıran etki alanı dışındaki etki

alanlarından veri yüklemek üzere JavaScript XMLHttpRequest nesnesini kullanmak için izne sahip değildir. Bir frame

veya iframe etiketi allowcrosscomainxhr niteliğini dahil edebilir. Bu niteliğin null dışındaki bir değere ayarlanması,

karedeki veya iframe'deki içeriğin isteği çağıran kodun etki alanı dışındaki etki alanlarından veri yüklemek için

Javascript XMLHttpRequest nesnesi kullanmasına izin verir.

<iframe id="UI" src="http://example.com/ui.html" sandboxRoot="http://example.com/" allowcrossDomainxhr="true" documentRoot="app:/"> </iframe>

Daha fazla bilgi için bkz. “Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma” sayfa 34.

CSS, kare, iframe ve img öğelerinin yüklenmesine ilişkin kısıtlamalar (uygulama dışı sanal alanlardaki içerik için)

Uzak (ağ) güvenlik sanal alanlarındaki HTML içeriği uzak sanal alanlardan (ağ URL'lerinden) yalnızca kare, iframe

ve img içeriği yükleyebilir.

Dosya sistemiyle yerel, ağ iletişimiyle yerel veya yerel-güvenilir sanal alanlardaki HTML içeriği yerel sanal alanlardan

(uygulamadan veya uzak sanal alanlardan değil) yalnızca kare, iframe ve img içeriğini okuyabilir.

JavaScript window.open() yönteminin çağrılmasına ilişkin kısıtlamalar

JavaScript window.open() yöntemine çağrı yoluyla oluşturulan bir pencere, uygulama dışı güvenlik sanal alanından

içerik görüntülediğinde, pencere başlığı ana (başlatılan) pencerenin başlığıyla başlar ve iki nokta karakteriyle devam

eder. Pencere başlığının bu bölümünü ekranın dışına taşımak için kodu kullanamazsınız.

Uygulama dışı güvenlik sanal alanlarındaki içerik, kullanıcı fare veya klavye etkileşimiyle tetiklenen bir olaya yanıt

olarak yalnızca JavaScript window.open() yöntemini başarıyla çağırabilir. Bu, uygulama dışı içeriğin aldatıcı biçimde

kullanılabilecek pencereler oluşturmasını engeller (örneğin kimlik avı saldırıları). Ayrıca, fare veya klavye olayı için

olay işleyici, window.open() yöntemini gecikmeden sonra yürütülmek üzere ayarlayamaz (örneğin setTimeout()

işlevini çağırarak).

Uzak sanal alanlardaki (ağ) içerik, içeriği uzak ağ sanal alanlarında açmak için yalnızca window.open() yöntemini

kullanabilir. İçeriği uygulamadan veya yerel sanal alanlardan açmak için window.open() yöntemini kullanamaz.

Dosya sistemiyle yerel, ağ iletişimiyle yerel veya yerel-güvenli sanal alanlardaki (bkz. “Sanal alanlar” sayfa 26 ) içerik,

içeriği yerel sanal alanlarda açmak için yalnızca window.open() yöntemini kullanabilir. İçeriği uygulamadan veya

uzak sanal alanlardan açmak için window.open() yöntemini kullanamaz.

Page 41: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

34ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Kısıtlanmış kodu çağırmada hata

Bu güvenlik kısıtlamaları nedeniyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir

JavaScript hatası gönderir: "Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı

güvenlik ihlali."

Daha fazla bilgi için bkz. “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 207.

Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma

AIR uygulamaları yüklendiklerinde, özel ayrıcalıklara sahip olurlar. Aynı ayrıcalıkların uygulamanın parçası olmayan

uzak dosyalar ve yerel dosyalar dahil diğer içeriğe verilmemesi önemlidir.

AIR sanal alan köprüsü hakkında

Etki alanlarında yer alan içerik, normalde diğer etki alanlarında yer alan komut dosyalarını çağıramaz. AIR

uygulamalarını ayrıcalıklı bilgi veya kontrolün yanlışlıkla verilmesinden korumak için, uygulama sanal alanındaki

içeriğe (uygulamayla yüklenen içerik) aşağıdaki kısıtlamalar yerleştirilmiştir:

• Uygulama güvenlik sanal alanındaki kod, Security.allowDomain() yöntemini çağırarak diğer sanal alanlara izin

veremez. Uygulama güvenlik sanal alanından bu yöntemin çağrılmasının herhangi bir etkisi olmaz.

• Uygulama dışı içeriğin LoaderContext.securityDomain veya LoaderContext.applicationDomain özelliği

ayarlanarak uygulama sanal alanına aktarılması engellenir.

Yine de AIR uygulamasının ana AIR uygulamasındaki komut dosyalarına denetimli erişime sahip olmak için uzak bir

etki alanından içerik istediği, veya tam tersi durumlar olur. Çalışma zamanı, bunu gerçekleştirmek için iki sanal alan

arasında ağ geçidi olarak görev yapan bir sanal alan köprüsü mekanizması sağlar. Bir sanal alan köprüsü, uzak ve

uygulama güvenlik sanal alanları arasında açık etkileşim sağlar.

Sanal alan köprüsü, hem yüklenmiş hem de yüklenen komut dosyalarının erişebileceği iki nesne gösterir:

• parentSandboxBridge nesnesi, yüklenen içeriğin yüklenmiş içerikteki komut dosyalarına özellikler ve işlevler

göstermesini sağlar.

• childSandboxBridge nesnesi, yüklenmiş içeriğin yüklenen içerikteki komut dosyalarına özellikler ve işlevler

göstermesini sağlar.

Sanal alan köprüsü yoluyla gösterilen nesneler başvuruya göre değil, değere göre iletilir. Tüm veriler sıralanmıştır. Bu,

köprünün bir tarafıyla gösterilen nesnelerin diğer tarafıyla ayarlanamayacağı anlamına gelir ve gösterilen tüm nesneler

türsüzdür. Ayrıca, yalnızca basit nesneler ve işlevleri gösterebilirsiniz; karmaşık nesneleri gösteremezsiniz.

Alt içerik parentSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma zamanı bir SecurityError

istisnası atar. Benzer şekilde, üst içerik childSandboxBridge nesnesinin bir özelliğini ayarlamaya çalıştığında, çalışma

zamanı bir SecurityError istisnası atar.

Sanal alan köprüsü örneği (SWF)

Bir AIR müzik deposu uygulamasının albümlerin fiyatını yayınlamak için uzak SWF içeriğine izin vermek istediğini,

ancak uzak SWF dosyasının fiyatın sağış fiyatı olup olmadığını açıklamasını istemediğini düşünün. Bu amaçla,

StoreAPI sınıfı fiyatı elde etmek için bir yöntem sağlar, ancak satış fiyatını saklı tutar. Daha sonra StoreAPI sınıfının

bir örneği, uzak SWF'yi yükleyen Loader nesnesinin LoaderInfo nesnesine ait parentSandboxBridge özelliğine

atanır.

Page 42: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

35ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Aşağıdaki, AIR müzik deposuna ilişkin koddur:

<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Music Store" creationComplete="initApp()"> <mx:Script> import flash.display.Loader; import flash.net.URLRequest; private var child:Loader; private var isSale:Boolean = false; private function initApp():void { var request:URLRequest = new URLRequest("http://[www.yourdomain.com]/PriceQuoter.swf") child = new Loader(); child.contentLoaderInfo.parentSandboxBridge = new StoreAPI(this); child.load(request); container.addChild(child); } public function getRegularAlbumPrice():String { return "$11.99"; } public function getSaleAlbumPrice():String { return "$9.99"; } public function getAlbumPrice():String { if(isSale) { return getSaleAlbumPrice(); } else { return getRegularAlbumPrice(); } } </mx:Script> <mx:UIComponent id="container" /> </mx:WindowedApplication>

StoreAPI nesnesi, normal albüm fiyatını elde etmek için ana uygulamayı çağırır, ancak getSaleAlbumPrice()

yöntemi çağrıldığında “Yok” mesajını döndürür. Aşağıdaki kod StoreAPI sınıfını tanımlar:

Page 43: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

36ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

public class StoreAPI { private static var musicStore:Object; public function StoreAPI(musicStore:Object) { this.musicStore = musicStore; } public function getRegularAlbumPrice():String { return musicStore.getRegularAlbumPrice(); } public function getSaleAlbumPrice():String { return "Not available"; } public function getAlbumPrice():String { return musicStore.getRegularAlbumPrice(); } }

Aşağıdaki kod, depo fiyatını bildiren, ancak satış fiyatını bildiremeyen bir PriceQuoter SWF dosyası örneğini temsil eder:

package { import flash.display.Sprite; import flash.system.Security; import flash.text.*; public class PriceQuoter extends Sprite { private var storeRequester:Object; public function PriceQuoter() { trace("Initializing child SWF"); trace("Child sandbox: " + Security.sandboxType); storeRequester = loaderInfo.parentSandboxBridge; var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); tf.appendText("Store price of album is: " + storeRequester.getAlbumPrice()); tf.appendText("\n"); tf.appendText("Sale price of album is: " + storeRequester.getSaleAlbumPrice()); } } }

Sanal alan köprüsü örneği (HTML)

HTML içeriğinde, parentSandboxBridge ve childSandboxBridge özellikleri alt belgenin JavaScript pencere

nesnesine eklenir. HTML içeriğinde köprü işlevlerinin nasıl kurulacağına ilişkin bir örnek için bkz. “Sanal alan köprü

arabirimini kurma” sayfa 221.

Page 44: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

37ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

API pozlamasını sınırlama

Sanal alan köprüleri pozlanırken, kötüye kullanma derecesini sınırlayan üst düzey API'ler göstermek önemlidir. Köprü

uygulamanızı çağıran içeriğin ödün verilmiş bir içerik olabileceğini aklınızda bulundurun (örneğin kod yerleştirmesi

yoluyla). Bu nedenle, örneğin köprü yoluyla readFile(path:String) yönteminin (rasgele bir dosyanın içeriğini

okuyan) gösterilmesi kötüye kullanım için açık oluşturabilir. Bir yol almayan ve belirli bir dosya okumayan

readApplicationSetting() API'sinin gösterilmesi daha uygundur. Daha anlamsal bir yaklaşım, bir bölümünden

ödün verildiğinde uygulamanın vereceği hasarı sınırlar.

Ayrıca bkz.

“Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 220

“Uygulama sanal alanı” sayfa 27

“Uygulama dışı sanal alanlardaki içeriğin ayrıcalıkları” sayfa 28

Diske yazma

Bir web tarayıcısında çalışan uygulamalar, kullanıcının yerel dosya sistemiyle sınırlı olarak etkileşime girer. Web

tarayıcıları, web içeriği yüklemenin kullanıcının bilgisayarından ödün verilmesiyle sonuçlanmamasını sağlamak için

güvenlik politikaları uygular. Örneğin, bir web tarayıcısında Flash Player aracılığıyla çalışan SWF dosyaları, önceden

kullanıcının bilgisayarında olan dosyalarla doğrudan etkileşim kuramaz. Paylaşılan nesneler ve tanımlama bilgileri,

kullanıcı tercihlerinin ve diğer verilerin korunması amacıyla kullanıcının bilgisayarına yazılabilir, ancak bu, dosya

sistem etkileşiminin sınırıdır. AIR uygulamaları, yerel olarak kurulduğundan, yerel dosya sistemi içinde okuyup

yazabilme özelliğini içeren farklı bir güvenlik sözleşmesine sahiptir.

Bu özgürlük, geliştiriciler için beraberinde yüksek sorumluluk getirir. Kaza eseri oluşan uygulama tehlikeleri yalnızca

uygulama işlevlerini değil, kullanıcı bilgisayarının bütünlüğünü de tehdit eder. Bu nedenle, geliştiriciler “Geliştiriciler

için en iyi güvenlik uygulamaları” sayfa 39 bölümünü okumalıdır.

AIR kullanıcıları, çeşitli URL şeması kurallarını kullanarak yerel dosya sistemine erişebilir ve dosyaları yazabilirler:

Not: AIR uygulamaları app: URL şeması kullanarak içeriği değiştiremezler. Ayrıca, uygulama dizini yönetici ayarları

nedeniyle salt okunur olabilir.

Kullanıcının bilgisayarında yönetici kısıtlamaları olmadığı sürece, AIR uygulamaları kullanıcının sabit sürücüsünde

herhangi bir konuma yazma ayrıcalığına sahiptir. Geliştiricilerin uygulamalarıyla ilişkili yerel depo için app-

storage:/ yolunu kullanmaları önerilir. Uygulamadan app-storage:/ hedefine yazılan dosyalar standart bir

konuma yerleştirilir.

• Mac OS'de: kullanıcının tercihler klasörü <appData> olduğunda, bir uygulamanın depo dizini

<appData>/<appId>/Yerel Depo/ olur. Bu genellikle /Kullanıcılar/<user>/Kitaplık/Tercihler

konumundadır.

URL şeması Açıklama

app:/ Uygulama dizinine başka ad. Bu yoldan erişilen dosyalar uygulama sanal alanına atanır ve çalışma zamanı

tarafından verilen tüm ayrıcalıklara sahiptir.

app-storage:/ Yerel depo dizinine başka ad, çalışma zamanı tarafından standartlaştırılmış. Bu yoldan erişilen dosyalar uygulama

dışı bir sanal alana atanır.

file:/// Kullanıcının sabit diskinin kökünü temsil eden başka ad. Bu yoldan erişilen bir dosya, uygulama dizininde

bulunuyorsa uygulama sanal alanına, aksi halde uygulama dışı sanal alana atanır.

Page 45: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

38ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

• Windows'ta: Kullanıcının CSIDL_APPDATA Özel Klasörü <appData> olduğunda, uygulamanın depo dizini

<appData>\<appId>\Local Store\ olur. Bu genellikle, C:\Belgeler ve Ayarlar\<userName>\Uygulama

Verileri konumundadır.

Bir uygulama kullanıcının dosya sisteminde var olan dosyalarla etkileşim kurmak üzere tasarlandıysa, “Geliştiriciler

için en iyi güvenlik uygulamaları” sayfa 39 bölümünü okuduğunuzdan emin olun.

Güvenilmeyen içerikle güvenli biçimde çalışma

Uygulama sanal alanına atanmayan içerik, ancak çalışma zamanının güvenlik ölçütlerini karşılayabilirse

uygulamanıza ek komut dosyası işlevleri sağlayabilir. Bu başlık, uygulama dışı içerikle AIR güvenlik sözleşmesini

açıklar.

Security.allowDomain()

AIR uygulamaları, uygulama dışı içerik için komut dosyası erişimini, Flash Player 9 tarayıcı eklentisinin güvenilmeyen

içerik için komut dosyası erişimini kısıtladığından daha sıkı biçimde kısıtlar. Örneğin, tarayıcıdaki Flash Player'da

yerel-güvenilir sanal alana atanmış bir SWF dosyası System.allowDomain() yöntemini çağırdığında, bu uzak

dosya uzak sanal alandan yerel-güvenilir sanal alana yeniden atanarak, belirtilen etki alanından yüklenen her SWF

dosyasına komut dosyası erişimi verilir. Kullanıcının bilgisayarındaki uygulama dışı dosyalara akılcı olmayan bir

biçimde erişim sağlayacağından, benzer yaklaşıma AIR uygulamalarındaki uygulama içeriğinden izin verilmez.

Security.allowDomain() yöntemine yapılan çağrılar dikkate alınmaksızın, uzak dosyalar uygulama sanal alanına

doğrudan erişemez.

Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma

Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturan AIR uygulamaları, daha karmaşık güvenlik

düzenlemelerine sahiptir. Uygulama sanal alanında yer almayan dosyalar, sanal alan köprüsü kullanımı yoluyla

yalnızca uygulama sanal alanındaki dosyaların özelliklerine ve yöntemlerine erişebilir. Bir sanal alan köprüsü,

uygulama içeriği ve uygulama dışı içerik arasında, iki dosya arasındaki açık etkileşimi sağlayan bir ağ geçidi olarak

görev yapar. Sanal alan köprüleri, doğru kullanıldığında uygulama dışı içeriğin uygulama içeriğinin parçası olan nesne

başvurularına erişimini kısıtlayarak fazladan bir güvenlik katmanı sağlar.

Sanal alan köprülerinin faydaları, örnekle en iyi şekilde gösterilebilir. AIR müzik deposu uygulamasının, depo

uygulamasının sonradan iletişim kurabileceği kendi SWF dosyalarını oluşturmak isteyen reklamcılara bir API

sağlamak istediğini düşünün. Depo, reklamcılara depodan sanatçıları ve CD'leri arayabilecekleri yöntemler sağlamak,

ancak aynı zamanda güvenlik nedenleriyle bazı yöntemleri ve özellikleri üçüncü taraf SWF dosyasının kullanımına

kapatmak istiyor.

Bu işlevleri bir sanal alan köprüsü sağlayabilir. Varsayılan olarak, bir AIR uygulamasına çalışma zamanında harici

olarak yüklenen içerik, ana uygulamadaki yöntemler ve özelliklere erişemez. Geliştirici, özel bir sanal alan köprüsü

uygulamasıyla bu yöntemleri ve özellikleri göstermeden uzak içeriğe servis sağlayabilir. Sanal alan köprüsünü,

yükleyen ve yüklenen içerik arasındaki iletişimi nesne başvurularını göstermeden sağlayan, güvenilen ve

güvenilmeyen içerik arasında yer alan bir patika olarak düşünün.

Sanal alan köprülerinin nasıl güvenli biçimde kullanılacağına ilişkin daha fazla bilgi için bkz. “Farklı etki alanlarındaki

içerikler arasında komut dosyası oluşturma” sayfa 34.

Page 46: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

39ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Dinamik olarak güvenilir olmayan SWF içeriği oluşturmaya karşı koruma

Loader.loadBytes() yöntemi, uygulamanın bir bayt dizisinden SWF içeriği oluşturması için bir yol sağlar. Ancak,

uzak kaynaktan yüklenen verilerdeki yerleştirme saldırıları, içerik yükleme sırasında ciddi hasara neden olabilir. Bu,

özellikle oluşturulan SWF içeriği tüm AIR API'leri kümesine erişebiliyorsa, uygulama sanal alanına veri yükleme

sırasında geçerlidir.

loadBytes() yöntemini yürütülebilir SWF kodu oluşturmadan kullanabilen geçerli kullanıcılar vardır. Örneğin,

görüntü zamanlamasını denetlemek için görüntü verileri oluşturmak amacıyla loadBytes() yöntemini

kullanabilirsiniz. Ses oynatma için dinamik SWF oluşturma gibi, kod yürütmeyi kullanan geçerli kullanıcılar da vardır.

AIR'de, loadBytes() yöntemi varsayılan olarak SWF içeriği yüklemenize izin vermez; yalnızca görüntü içeriği

yüklemenize izin verir. AIR'de loadBytes() yönteminin loaderContext özelliği, uygulamanın yürütülebilir SWF

içeriğini yüklemek üzere loadBytes() kullanmasına izin vermek için true olarak ayarlayabileceğiniz

allowLoadBytesCodeExecution özelliğini içerir. Aşağıdaki kod, bu özelliğin nasıl kullanılacağını gösterir:

var loader:Loader = new Loader(); var loaderContext:LoaderContext = new LoaderContext(); loaderContext.allowLoadBytesCodeExecution = true; loader.loadBytes(bytes, loaderContext);

SWF içeriği yüklemek için loadBytes() çağırdığınızda ve LoaderContext nesnesinin

allowLoadBytesCodeExecution özelliği false (varsayılan) olarak ayarlandığında, the Loader nesnesi bir

SecurityError istisnası atar.

Not: Adobe AIR'in gelecekteki bir sürümünde bu API değişebilir. Bu gerçekleştiğinde, LoaderContext sınıfının

allowLoadBytesCodeExecution özelliğini kullanan içeriği yeniden derlemeniz gerekebilir.

Geliştiriciler için en iyi güvenlik uygulamaları

AIR uygulamaları web teknolojileri kullanılarak oluşturulmuş olsa da, geliştiricilerin tarayıcı güvenlik sanal alanı

içinde çalışmadıklarını bilmeleri önemlidir. Bu, yerel sisteme istemli veya istemsiz zarar verebilecek AIR uygulamaları

oluşturmanın mümkün olduğu anlamına gelir. AIR bu riski en aza indirmeye çalışmaktadır, ancak yine de güvenlik

açıklarının kullanılabileceği yollar mevcuttur. Bu başlık, önemli olası tehlikeleri konu alır.

Dosyaları uygulama güvenlik sanal alanına aktarmakdan doğan risk

Uygulama dizininde bulunan dosyalar, uygulama sanal alanına atanır ve tüm çalışma zamanı ayrıcalıklarına sahiptir.

Yerel dosya sistemine yazan uygulamaların app-storage:/ hedefine yazmaları önerilir. Dosyalar uygulama sanal

alanına atanmadığından ve daha düşük bir güvenlik riski sunduğundan, bu dizin kullanıcının bilgisayarındaki

uygulama dosyalarından ayrı olarak bulunur. Geliştiricilerin şunları dikkate alması önerilir:

• Bir dosyayı, yalnızca gerekli olduğunda bir AIR dosyasına dahil edin (yüklenen uygulamada).

• Bir komut dosyasını yalnızca davranışı tam olarak anlaşılır ve güvenilir olduğunda bir AIR dosyasına dahil edin

(yüklenen uygulamada).

• Uygulama dizinindeki içeriğe yazmayın veya bu içeriği değiştirmeyin. Çalışma zamanı, SecurityError istisnasını

atarak, uygulamaların app:/ URL şemasını kullanarak dosyaları ve dizinleri yazmasını veya değiştirmesini

engeller.

• Kod yürütmesine neden olabilecek AIR API yöntemlerine ilişkin parametreler olan ağ kaynaklarından gelen

verileri kullanmayın. Bu, Loader.loadBytes() yöntemini ve JavaScript eval() işlevini içerir.

Page 47: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

40ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR güvenliği

Yolları belirlemek için harici bir kaynak kullanmaktan doğan risk

Harici veri veya içerik kullanımı sırasında, AIR uygulamasından ödün verilebilir. Bu nedenle, ağdan veya dosya

sisteminden veri kullanırken özellikle dikkat edin. Güven sorumluluğu nihayetinde geliştiriciye ve kurduğu ağ

bağlantılarına bağlıdır, ancak yabancı veriler yapıları gereği risklidir ve hassas işlemlerde girdi olarak

kullanılmamalıdır. Geliştiriciler, aşağıdakilere karşı uyarılır:

• Dosya adını belirlemek için bir ağ kaynağından verileri kullanma

• Uygulamanın özel bilgi göndermek için kullandığı bir URL yapmak için bir ağ kaynağından verileri kullanma

Güvenli olmayan kimlik bilgilerinin kullanılması, saklanması veya

iletilmesinden doğan risk

Kullanıcı kimlik bilgilerinin kullanıcının yerel dosya sisteminde saklanması, yapısı gereği bu kimlik bilgilerinden ödün

verilebileceği riskini doğurur. Geliştiricilerin şunları dikkate alması önerilir:

• Kimlik bilgilerinin yerel olarak saklanması gerekiyorsa, kimlik bilgilerinin yerel dosya sistemine yazılırken

şifrelenmesi. Çalışma zamanı, EncryptedLocalStore sınıfı aracılığıyla, yüklenen her uygulamaya benzersiz

şifrelenmiş bir depo sağlar. Ayrıntılar için bkz. “Şifreli verileri saklama” sayfa 189.

• Kaynak güvenilir olmadıkça, bir ağ kaynağına şifrelenmemiş kullanıcı kimlik bilgilerini iletmeyin.

• Kimlik bilgileri oluşturmada hiçbir zaman varsayılan bir parola belirlemeyin - kullanıcıların kendi parolalarını

oluşturmalarına izin verin. Varsayılanı bırakan kullanıcılar, kimlik bilgilerini varsayılan parolayı önceden bilen bir

saldırgana göstermiş olurlar

İndirgeme saldırısından doğan risk

Uygulama yükleme sırasında, çalışma zamanı uygulamanın bir sürümünün yüklü olup olmadığını kontrol eder. Bir

uygulama önceden yüklenmişse, çalışma zamanı sürüm dizesini yüklenmekte olan uygulamanın sürümüyle

karşılaştırır. Bu dize farklıysa, kullanıcı yüklemeyi yükseltmeyi seçebilir. Çalışma zamanı, yeni yüklenen sürümün eski

sürümden daha yeni olacağını garanti etmez, yalnızca değişik olduğunu garanti eder. Saldırgan, bir güvenlik açığını

atlatmak için kullanıcıya daha eski bir sürüm dağıtabilir. Bu nedenle, uygulama çalışırken geliştiricinin sürüm

kontrolleri yapması önerilir. Uygulamaların gerekli güncellemeler için ağı kontrol etmesi, iyi bir fikirdir. Bu şekilde,

saldırgan kullanıcının eski sürümü çalıştırmasını sağlasa bile, bu eski sürüm güncellenmesi gerektiğini anlayacaktır.

Ayrıca, uygulamanız için açık bir sürüm belirleme şeması kullanmak, düşük bir sürüm yüklemeleri için kullanıcıların

kandırılmasını zorlaştıracaktır. Uygulama sürümlerinin sağlanmasına ilişkin ayrıntılar için bkz. “Uygulama

tanımlayıcı dosyasında özellikleri tanımlama” sayfa 42.

Kod imzalama

Tüm AIR yükleyici dosyaları kodlarının imzalanmış olması gerekir. Kod imzalama, belirtilen yazılım kaynağının

doğru olduğunu teyit etmeye ilişkin bir şifreleme işlemidir. AIR uygulamaları, bir sertifikayı harici bir sertifika

yetkilisinden (CA) bağlama veya kendi sertifikanızı oluşturma yoluyla imzalanabilir. İyi bilinen bir CA'dan alınan

ticari bir sertifika kesinlikle önerilir ve kullanıcılarınıza sahte bir ürünü değil, sizin uygulamanızı yüklediklerine ilişkin

güvence sağlar. Ancak, kendinden imzalı sertifikalar SDK'dan adt kullanılarak veya Flash, Flex Builder ya da sertifika

oluşturma için adt kullanan herhangi bir uygulama kullanılarak oluşturulabilir. Kendinden imzalı sertifikalar,

yüklenen uygulamanın orijinal olduğuna dair herhangi bir güvence sağlamaz.

AIR uygulamalarını dijital olarak imzalama hakkında daha fazla bilgi için bkz. “AIR dosyasını dijital olarak imzalama”

sayfa 284 ve “Komut satırı araçlarını kullanarak AIR uygulaması oluşturma” sayfa 304.

Page 48: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

41

Bölüm 8: AIR uygulamasının özelliklerini ayarlama

Bir AIR uygulamasını oluşturan tüm dosyaların ve varlıkların dışında, her AIR uygulaması bir uygulama tanımlayıcı

dosyası ister. Uygulama tanımlayıcı dosyası, uygulamanın temel özelliklerini tanımlayan bir XML dosyasıdır.

Adobe® AIR™ Update for Adobe® Flash® CS3 Professional kullanarak AIR uygulamaları geliştirirken, bir AIR projesi

oluşturduğunuzda uygulama tanımlayıcı dosyası otomatik olarak oluşturulur. Komutlar > AIR - Uygulama ve

Yükleyici Ayarları menüsünden uygulama tanımlayıcı ayarlarını değiştirebileceğiniz bir panele ulaşabilirsiniz.

Uygulama tanımlayıcı dosyasını elle de düzenleyebilirsiniz.

Uygulama tanımlayıcı dosyasının yapısı

Uygulama tanımlayıcı dosyası ad, sürüm, telif hakkı, vb. gibi, uygulamanın bütününü etkileyen özellikler içerir.

Uygulama tanımlayıcı dosyası için herhangi bir dosya adı kullanılabilir. Flash CS3 veya CS4'teki varsayılan ayarları

kullanarak bir AIR dosyası oluşturduğunuzda, uygulama tanımlayıcı dosyası application.xml olarak yeniden

adlandırılır ve AIR paketinin içinde özel bir dizine yerleştirilir.

Bu örnek bir uygulama tanımlayıcı dosyasıdır:

<?xml version="1.0" encoding="utf-8" ?> <application xmlns="http://ns.adobe.com/air/application/1.1"> <id>com.example.HelloWorld</id> <version>2.0</version> <filename>Hello World</filename> <name>Example Co. AIR Hello World</name> <description>

<text xml:lang="en">This is a example.</text> <text xml:lang="fr">C'est un exemple.</text> <text xml:lang="es">Esto es un ejemplo.</text>

</description> <copyright>Copyright (c) 2006 Example Co.</copyright> <initialWindow> <title>Hello World</title> <content> HelloWorld-debug.swf </content> <systemChrome>none</systemChrome> <transparent>true</transparent> <visible>true</visible> <minimizable>true</minimizable> <maximizable>false</maximizable> <resizable>false</resizable> <width>640</width> <height>480</height> <minSize>320 240</minSize> <maxSize>1280 960</maxSize> </initialWindow> <installFolder>Example Co/Hello World</installFolder> <programMenuFolder>Example Co</programMenuFolder>

Page 49: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

42ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

<icon> <image16x16>icons/smallIcon.png</image16x16> <image32x32>icons/mediumIcon.png</image32x32> <image48x48>icons/bigIcon.png</image48x48> <image128x128>icons/biggestIcon.png</image128x128> </icon> <customUpdateUI>true</customUpdateUI> <allowBrowserInvocation>false</allowBrowserInvocation> <fileTypes> <fileType> <name>adobe.VideoFile</name> <extension>avf</extension> <description>Adobe Video File</description> <contentType>application/vnd.adobe.video-file</contentType> <icon> <image16x16>icons/avfIcon_16.png</image16x16> <image32x32>icons/avfIcon_32.png</image32x32> <image48x48>icons/avfIcon_48.png</image48x48> <image128x128>icons/avfIcon_128.png</image128x128> </icon> </fileType> </fileTypes> </application>

Uygulama tanımlayıcı dosyasında özellikleri tanımlama

Uygulama tanımlayıcı dosyası, kökünde, birçok niteliği olan bir application özelliği içerir:

<application version="1.0" xmlns="http://ns.adobe.com/air/application/1.1">

xmlns Varsayılan XML ad alanı olarak tanımlamanız gereken AIR ad alanı. AIR'in her ana sürümüyle (küçük

yamalarla değil) oluşan ad alanı değişiklikleri. “1.0” gibi ad alanının son parçası, uygulama tarafından gerekli kılınan

çalışma zamanı sürümünü gösterir.

minimumPatchLevel İsteğe bağlı. Uygulama tarafından istenen minimum Adobe AIR yama düzeyini belirlemek için

minimumPatchLevel niteliğini kullanın. AIR uygulamaları genellikle yalnızca uygulama tanımlayıcı dosyasındaki ad

alanını tanımlayarak kendileri için gerekli olan AIR sürümünü belirtir. Ad alanı AIR'in her ana sürümü için değişir

(1.0 veya 1.1 gibi). Ad alanı, yama sürümleri için değişmez. Yama sürümleri yalnızca sınırlı bir düzeltme kümesi içerir,

API değişikliği içermez. Genellikle uygulamalar hangi yama sürümünün gerekli olduğunu belirtmez. Ancak bir

yamadaki düzeltme, uygulamadaki bir sorunu giderebilir. Bu durumda uygulama, yamanın uygulama yüklenmeden

önce uygulanmasını sağlamak amacıyla minimumPatchLevel niteliği için bir değer belirtebilir. AIR uygulama

yükleyicisi gerekirse kullanıcıdan gerekli sürümü veya yamayı indirmesini ve yüklemesini ister. Aşağıdaki örnek,

minimumPatchLevel niteliği için bir değer belirten uygulama öğesini gösterir:

<application version="1.0" xmlns="http://ns.adobe.com/air/application/1.1" minimumPatchLevel="5331">

Temel uygulama bilgilerini tanımlama

Aşağıdaki öğeler uygulama kimliğini, sürümü, adı, dosya adını, açıklamayı ve telif hakkı bilgilerini tanımlar:

Page 50: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

43ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

<id>com.example.samples.TestApp</id> <version>2.0</version> <filename>TestApp</filename> <name> <text xml:lang="en">Hello AIR</text> <text xml:lang="fr">Bonjour AIR</text> <text xml:lang="es">Hola AIR</text> </name> <description>An MP3 player.</description> <copyright>Copyright (c) 2008 YourCompany, Inc.</copyright>

id Uygulama kimliği olarak da bilinen, uygulama için benzersiz olan tanımlayıcı bir dize. Nitelik değeri aşağıdaki

karakterlerle sınırlıdır:

• 0–9

• a–z

• a–z

• . (nokta)

• - (tire)

Değer 1 ila 212 karakter arasında olmalıdır. Bu öğe gereklidir.

id dizesi genellikle, ters çevrilen DNS etki alanı adresiyle, Java™ paket veya sınıf adıyla ya da bir Mac OS® X Universal

Type Identifier ile hizalı, noktayla ayrılan bir hiyerarşi kullanır. DNS benzeri biçim zorlanmaz ve AIR, ad ve gerçek

DNS etki alanları arasında bir ilişkilendirme oluşturmaz.

version Uygulamanın sürüm bilgilerini belirtir. (Çalışma zamanının sürümüyle hiçbir ilgisi yoktur). Sürüm dizesi,

uygulama tanımlı bir belirleyicidir. AIR, sürüm dizesini herhangi bir şekilde yorumlamaz. Bu nedenle “3.0”

sürümünün “2.0” sürümünden daha güncel olduğu varsayılmaz. Örnekler: "1.0", ".4", "0.5", "4.9", "1.3.4a". Bu

öğe gereklidir.

filename Uygulama yüklendiğinde uygulamanın dosya adı olarak kullanılacak dize (uzantısız). Uygulama dosyası

çalışma zamanında AIR uygulamasını başlatır. name değeri sağlanmazsa, filename öğesi de yükleme klasörünün adı

olarak kullanılır. Bu öğe gereklidir.

filename özelliği, çeşitli dosya sistemlerinde dosya adları olarak kullanımı yasak olan aşağıdaki karakterler dışında

herhangi bir Unicode (UTF-8) karakterini içerebilir:

filename değeri noktayla bitemez.

Karakter Onaltılık Kod

çeşitli 0x00 – x1F

* x2A

" x22

: x3A

> x3C

< x3E

? x3F

\ x5C

| x7C

Page 51: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

44ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

name (İsteğe bağlı, ancak önerilir) AIR uygulama yükleyicisi tarafından görüntülenen başlık.

Tek bir metin düğümü belirtirseniz (birden çok text öğesi yerine), AIR uygulama yükleyicisi sistem diline

bakılmaksızın bu adı kullanır:

<name>Test Application</name>

AIR 1.0 uygulama tanımlayıcı şeması, ad için yalnızca bir tane basit metin düğümünün tanımlanmasına izin verir

(birden çok text öğesi değil).

AIR 1.1'de name öğesinde birden çok dil belirtebilirsiniz. Örneğin aşağıdaki örnek, adı üç dilde belirtir (İngilizce,

Fransızca ve İspanyolca):

<name> <text xml:lang="en">Hello AIR</text> <text xml:lang="fr">Bonjour AIR</text> <text xml:lang="es">Hola AIR</text> </name>

Her metin öğesinin xml:lang niteliği, RFC4646'da da (http://www.ietf.org/rfc/rfc4646.txt) tanımlandığı gibi bir dil

kodu belirtir.

AIR uygulama yükleyicisi, kullanıcının işletim sisteminin kullanıcı arabirimi diline en yakın eşleşme olan adı kullanır.

Örneğin, uygulama tanımlayıcı dosyasının name öğesinin en (English) yerel ayarları için bir değer içerdiği bir yükleme

düşünün. İşletim sistemi en (English) adını kullanıcı arabirimi dili olarak tanımlıyorsa, AIR uygulama yükleyicisi en

adını kullanır. Ayrıca sistem kullanıcı arabirimi adı en-US (U.S. English) olduğunda da en adını kullanır. Ancak

kullanıcı arabirimi dili en-US ise ve uygulama tanımlayıcı dosyası hem en-US hem de en-GB adlarını tanımlıyorsa,

AIR uygulama yükleyicisi en-US değerini kullanır. Uygulama, sistem kullanıcı arabirimi dilleriyle eşleşen bir ad

tanımlamazsa, AIR uygulama yükleyicisi, uygulama tanımlayıcı dosyasında tanımlı olan ilk name değerini kullanır.

Hiçbir name öğesi belirtilmemişse, AIR uygulama yükleyicisi filename öğesini uygulama adı olarak görüntüler.

name öğesi yalnızca AIR uygulama yükleyicisinde kullanılan uygulama başlığını tanımlar. AIR 1.1 uygulama

yükleyicisi birden çok dili destekler: Geleneksel Çince, Basitleştirilmiş Çince, İngilizce, Fransızca, Almanca, İtalyanca,

Japonca, Korece, Brezilya Portekizcesi, Rusça ve İspanyolca. AIR uygulama yükleyicisi görüntülenen dilini (uygulama

başlığı ve açıklamasının dışındaki metinler için), sistem kullanıcı arabirimi diline dayalı olarak seçer. Bu dil seçimi,

uygulama tanımlayıcı dosyasındaki ayarlardan bağımsızdır.

name öğesi, çalışan, yüklü uygulama için kullanılabilir olan yerel ayarları tanımlamaz. Çok dilli uygulamalar geliştirme

konusunda ayrıntılar için bkz. “AIR uygulamalarını yerelleştirme” sayfa 294.

description (İsteğe bağlı) AIR uygulama yükleyicisinde görüntülenen uygulama açıklaması.

Tek bir metin düğümü belirtirseniz (birden çok text öğesi değil), AIR uygulama yükleyicisi sistem diline bakılmaksızın

bu açıklamayı kullanır:

<description>This is a sample AIR application.</description>

AIR 1.0 uygulama tanımlayıcı şeması, ad için yalnızca bir tane basit metin düğümünün tanımlanmasına izin verir

(birden çok text öğesi değil).

AIR 1.1'de description öğesinde birden çok dil belirtebilirsiniz. Örneğin aşağıdaki örnek bir açıklamayı üç dilde

belirtir (İngilizce, Fransızca ve İspanyolca):

<description> <text xml:lang="en">This is a example.</text> <text xml:lang="fr">C'est un exemple.</text> <text xml:lang="es">Esto es un ejemplo.</text> </description>

Page 52: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

45ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

Her metin öğesinin xml:lang niteliği, RFC4646'da da (http://www.ietf.org/rfc/rfc4646.txt) tanımlandığı gibi bir dil

kodu belirtir.

AIR uygulama yükleyicisi, kullanıcının işletim sisteminin kullanıcı arabirimi diline en yakın eşleşme olan açıklamayı

kullanır. Örneğin, uygulama tanımlayıcı dosyasının description öğesinin en (English) yerel ayarları için bir değer

içerdiği bir yükleme düşünün. Kullanıcının sistemi en (English) adını kullanıcı arabirimi dili olarak tanımlıyorsa, AIR

uygulama yükleyicisi en adını kullanır. Ayrıca sistem kullanıcı arabirimi adı en-US (U.S. English) olduğunda da en

adını kullanır. Ancak sistem kullanıcı arabirimi dili en-US ise ve uygulama tanımlayıcı dosyası hem en-US hem de en-

GB adlarını tanımlıyorsa, AIR uygulama yükleyicisi en-US değerini kullanır. Uygulama, sistem kullanıcı arabirimi

diliyle eşleşen bir ad tanımlamazsa, AIR uygulama yükleyicisi, uygulama tanımlayıcı dosyasında tanımlı olan ilk

description değerini kullanır.

Çok dilli uygulamalar geliştirme konusunda daha fazla bilgi için bkz. “AIR uygulamalarını yerelleştirme” sayfa 294.

copyright (İsteğe bağlı) AIR uygulaması için telif hakkı bilgileri. Mac OS'de telif hakkı metni, yüklü uygulamanın

Hakkında iletişim penceresinde görüntülenir. Mac OS'de telif hakkı bilgileri ayrıca, uygulamanın Info.plist dosyasının

NSHumanReadableCopyright alanında da kullanılır.

Yükleme klasörünü ve program menü klasörünü tanımlama

Yükleme ve program menü klasörleri aşağıdaki özellik ayarlarıyla tanımlanır:

<installFolder>Acme</installFolder> <programMenuFolder>Acme/Applications</programMenuFolder>

installFolder (İsteğe bağlı) Varsayılan yükleme dizininin alt dizinini tanımlar.

Windows'ta varsayılan yükleme alt dizini, Program Dosyaları dizinidir. Mac OS'de bu dizin /Applications dizinidir.

Örneğin installFolder özelliği "Acme" olarak ayarlıysa ve bir uygulama "ExampleApp" olarak adlandırılırsa,

uygulama Windows'ta C:\Program Files\Acme\ExampleApp dizinine, MacOS'de /Applications/Acme/Example.app

dizinine yüklenir.

Aşağıda olduğu gibi yuvalanmış bir alt dizin belirtmek istiyorsanız, dizin ayırıcı karakteri olarak eğik çizgi (/)

karakterini kullanın:

<installFolder>Acme/Power Tools</installFolder>

installFolder özelliği, çeşitli dosya sistemlerinde klasör adı olarak kullanımı yasaklanmış olanların dışında tüm

Unicode (UTF-8) karakterlerini içerebilir (istisnaların bir listesi için yukarıda filename özelliğine bakın).

installFolder özelliği isteğe bağlıdır. installFolder özelliği tanımlamazsanız uygulama, name özelliğine dayalı

olarak varsayılan yükleme dizininin alt dizinine yüklenir.

programMenuFolder (İsteğe bağlı) Windows işletim sisteminin Tüm Programlar menüsündeki uygulamanın

kısayollarının hangi konuma yerleştirileceğini belirtir. (Bu ayar şu anda diğer işletim sistemlerinde yoksayılmaktadır.)

Özelliğin değerinde izin verilen karakterlere yönelik kısıtlamalar, installFolder özelliği için geçerli olanlarla

aynıdır. Bu değerin son karakteri olarak eğik çizgi (/) karakterini kullanmayın.

Başlangıç uygulama penceresinin özelliklerini tanımlama

Bir AIR uygulaması yüklendiğinde, çalışma zamanı, uygulamanın başlangıç penceresini oluşturmak için

initialWindow öğesindeki değerleri kullanır. Daha sonra çalışma zamanı content öğesinde belirtilen SWF veya

HTML dosyasını pencereye yükler.

Bu, initialWindow öğesine bir örnektir:

Page 53: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

46ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

<initialWindow> <content>AIRTunes.swf</content> <title>AIR Tunes</title> <systemChrome>none</systemChrome> <transparent>true</transparent> <visible>true</visible> <minimizable>true</minimizable> <maximizable>true</maximizable> <resizable>true</resizable> <width>400</width> <height>600</height> <x>150</x> <y>150</y> <minSize>300 300</minSize> <maxSize>800 800</maxSize> </initialWindow>

initialWindow öğesinin alt öğeleri, kök içerik dosyasının yükleneceği pencerenin özelliklerini ayarlar.

content content öğesi için belirtilen değer, uygulamanın ana içerik dosyasının URL'sidir. Bu bir SWF dosyası veya

HTML dosyası olabilir. URL, uygulama yükleme klasörünün köküne bağlı olarak belirtilir. (ADL ile bir AIR

uygulamasını çalıştırırken, URL, uygulama tanımlayıcı dosyasını içeren klasöre bağlıdır. Farklı bir kök dizin belirtmek

için, ADL'nin root-dir parametresini kullanabilirsiniz.)

Not: İçerik öğesinin değeri bir URL gibi işlev gördüğü için, içerik dosyasının adındaki karakterler RFC 1738'de belirtilen

kurallara göre URL kodlamalı olmalıdır. Örneğin boşluk karakterleri %20 olarak kodlanmalıdır.

title (İsteğe bağlı) Pencere başlığı.

systemChrome (İsteğe bağlı) Bu niteliği standard olarak ayarlarsanız, işletim sistemi tarafından sağlanan standart

sistem kromu görüntülenir. none olarak ayarlarsanız, hiçbir sistem kromu görüntülenmez. Sistem kromu ayarı

çalışma zamanında değiştirilemez.

transparent (İsteğe bağlı) Uygulama penceresinin alfa karışımını desteklemesini istiyorsanız, "true" olarak

ayarlayın. Saydamlık özelliğine sahip bir pencere daha yavaş çizebilir ve daha fazla bellek gerektirebilir. Saydamlık

ayarı çalışma zamanında değiştirilemez.

Önemli: transparent öğesini true olarak yalnızca systemChromenone olduğunda ayarlayabilirsiniz.

visible (İsteğe bağlı) Ana pencerenin oluşturulduğu andan itibaren görünür olmasını istiyorsanız true olarak

ayarlayın. Varsayılan olarak false değerindedir.

Ana pencereyi başlangıçta gizli bırakmak isteyebilirsiniz, böylece pencerenin konumunda, boyutunda ve içeriğinin

mizanpajında yapılan değişiklikler gösterilmez. Ardından pencerenin activate() yöntemini çağırarak veya visible

özelliğini true olarak değiştirerek pencereyi görüntüleyebilirsiniz. Ayrıntılar için bkz. “Yerel pencerelerle çalışma”

sayfa 53.

x, y, width, height (İsteğe bağlı) Uygulamanın ana penceresinin başlangıç sınırları. Bu değerleri ayarlamazsanız

pencere boyutu, kök SWF dosyasındaki ayarlar tarafından veya HTML ise işletim sistemi tarafından belirlenir.

minSize, maxSize (İsteğe bağlı) Pencerenin minimum ve maksimum boyutları. Ayarlamadığınız takdirde değerler

işletim sistemi tarafından belirlenir.

minimizable, maximizable, resizable (İsteğe bağlı) Pencere için küçültme, büyütme ve yeniden boyutlandırma

seçeneklerinden hangilerinin uygulanabileceğini belirtir. Bu ayarlar varsayılan olarak true şeklindedir.

Page 54: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

47ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

Not: Mac OS X gibi, pencereleri büyütmenin yeniden boyutlandırma işlemi olduğu işletim sistemlerinde, pencerenin

yakınlaştırılmasını ve yeniden boyutlandırılmasını önlemek için hem büyütülebilir hem de yeniden boyutlandırılabilir

false olarak ayarlı olmalıdır.

Simge dosyalarını belirtme

icon özelliği, uygulama için kullanılacak bir veya daha fazla simge dosyasını belirtir. Bir simge dahil etmek isteğe

bağlıdır. Bir icon özelliği belirtmezseniz, işletim sistemi varsayılan bir simge görüntüler.

Belirtilen yol, uygulama kök dizinine bağlıdır. Simge dosyaları PNG formatında olmalıdır. Aşağıdaki simge

boyutlarının tümünü belirtebilirsiniz:

<icon> <image16x16>icons/smallIcon.png</image16x16> <image32x32>icons/mediumIcon.png</image32x32> <image48x48>icons/bigIcon.png</image48x48> <image128x128>icons/biggestIcon.png</image128x128> </icon>

Belirli bir boyut için öğe mevcutsa, dosyadaki görüntü tam olarak belirtilen boyutta olmalıdır. Tüm boyutlar

sağlanmamışsa en yakın boyut, işletim sistemi tarafından simgenin kullanımı için uygun şekilde ölçeklenir.

Not: Belirtilen simgeler AIR paketine otomatik olarak eklenmez. Uygulama paketlendiğinde simge dosyaları doğru,

göreceli konumlarına dahil edilmelidir.

En iyi sonuç için, her kullanılabilir boyut için bir görüntü sağlayın. Buna ek olarak, simgelerin hem 16 hem de 32 bit

renk modlarında düzgün göründüğünden emin olun.

Uygulama güncellemeleri için özel kullanıcı arabirimi sağlama

AIR varsayılan yükleme iletişim kutularını kullanarak uygulamaları yükler ve günceller. Ancak, bir uygulamayı

güncellemek için kendi kullanıcı arabiriminizi de sağlayabilirsiniz. Uygulamanızın güncelleme işlemini kendisinin

işlemesi gerektiğini belirtmek için, customUpdateUI öğesini true olarak ayarlayın:

<customUpdateUI>true</customUpdateUI>

Uygulamanızın yüklü sürümünde customUpdateUI öğesi true olarak ayarlıyken kullanıcı yeni bir sürüm için AIR

dosyasını çift tıklattığında veya kesintisiz yükleme özelliğini kullanarak uygulamanın güncellemesini yüklediğinde,

çalışma zamanı, varsayılan AIR uygulama yükleyicisi yerine uygulamanın yüklü sürümünü açar. Uygulama

mantığınız güncelleme işlemine nasıl devam edileceğini belirleyebilir. (Bir yükseltme işleminin devam edebilmesi için,

AIR dosyasındaki uygulama kimliği ve yayıncı kimliği yüklü uygulamadakilerle eşleşmelidir.)

Not: customUpdateUI mekanizması, yalnızca uygulamanın önceden yüklenmiş olduğu ve kullanıcının bir güncelleme

içeren AIR yükleme dosyasını çift tıklattığı veya kesintisiz yükleme özelliğini kullanarak uygulamanın güncellemesini

yüklediği durumlarda çalışır. customUpdateUItrue olsa da olmasa da, özel kullanıcı arabiriminizi gerekli şekilde

görüntüleyerek kendi uygulama mantığınızı kullanıp bir güncellemeyi indirebilir ve başlatabilirsiniz.

Daha fazla bilgi için, bkz. “AIR uygulamalarını güncelleme” sayfa 290.

Uygulamanın tarayıcıdan başlatılmasına izin verme

Aşağıdaki ayarı belirtirseniz, yüklenen AIR uygulaması tarayıcı başlatma özelliği kullanılarak başlatılabilir

(kullanıcının bir web tarayıcısındaki bir sayfada bulunan linki tıklatmasıyla):

<allowBrowserInvocation>true</allowBrowserInvocation>

Varsayılan olarak false değerindedir.

Page 55: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

48ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamasının özelliklerini ayarlama

Bu ayarı true olarak ayarlarsanız, “Tarayıcı başlatma” sayfa 260'da anlatılan güvenlik sonuçlarını göz önünde

bulundurduğunuzdan emin olun.

Daha fazla bilgi için bkz. “AIR uygulamalarını web sayfasından yükleme ve çalıştırma” sayfa 276.

Dosya türü ilişkilendirmelerini bildirme

fileTypes öğesi sayesinde, bir AIR uygulamasının ilişkilendirildiği dosya türlerini bildirebilirsiniz. Bir AIR

uygulaması yüklendiğinde, bildirilen tüm dosya türleri işletim sistemiyle kaydedilir ve önceden başka bir uygulamayla

ilişkilendirilmemişse, AIR uygulamasıyla ilişkilendirilir. Bir dosya türüyle başka bir uygulama arasındaki mevcut

ilişkiyi geçersiz kılmak için, çalışma zamanında NativeApplication.setAsDefaultApplication() yöntemini

kullanın (tercihen kullanıcının izniyle).

Not: Çalışma zamanı yöntemleri yalnızca uygulama tanımlayıcısında bildirilen dosya türlerinin ilişkilendirmelerini

yönetebilir.

<fileTypes> <fileType> <name>adobe.VideoFile</name> <extension>avf</extension> <description>Adobe Video File</description> <contentType>application/vnd.adobe.video-file</contentType> <icon> <image16x16>icons/AIRApp_16.png</image16x16> <image32x32>icons/AIRApp_32.png</image32x32> <image48x48>icons/AIRApp_48.png</image48x48> <image128x128>icons/AIRApp_128.png</image128x128> </icon> </fileType> </fileTypes>

fileTypes öğesi isteğe bağlıdır. Mevcutsa, herhangi bir sayıda fileType öğesi içerebilir.

name ve extension öğeleri, dahil ettiğiniz her fileType bildirimi için gereklidir. Aynı ad birden çok uzantı için

kullanılabilir. Uzantı dosya türünü benzersiz bir şekilde tanımlar. (Uzantının önünde nokta olmadan belirtildiğini

unutmayın.) description öğesi isteğe bağlıdır ve işletim sistemi kullanıcı arabirimi tarafından kullanıcıya

görüntülenir. contentType özelliği de isteğe bağlıdır, ancak bazı durumlarda bir dosyayı açmak için işletim sisteminin

en iyi uygulamayı bulmasına yardımcı olur. Değer, dosya içeriğinin MIME türü olmalıdır.

Dosya uzantısı için, uygulama simgesi öğesiyle aynı format kullanılarak simge belirtilebilir. Simge dosyaları ayrıca AIR

yükleme dosyasına da dahil edilmelidir (dosyalar otomatik olarak paketlenmez).

Bir dosya türü AIR uygulamasıyla ilişkilendirildiğinde, kullanıcının bu tür bir dosyayı her açışında uygulama çağrılır.

Uygulama zaten çalışıyorsa, AIR çalışan örneğe InvokeEvent nesnesini gönderir. Aksi takdirde uygulamayı ilk AIR

başlatır. Dosya yolu her iki durumda da NativeApplication nesnesi tarafından gönderilen InvokeEvent nesnesi

tarafından alınabilir. Dosyayı açmak için bu yolu kullanabilirsiniz.

Daha fazla bilgi için bkz. “Dosya ilişkilendirmelerini yönetme” sayfa 265 ve “Komut satırı argümanlarını yakalama”

sayfa 258.

Page 56: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

49

Bölüm 9: Adobe AIR uygulamasındaki yeni işlevler

Bu konu, Adobe® Flash® Player uygulamasında çalışan SWF içeriğinin kullanamadığı Adobe® AIR™ uygulamasındaki

yeni işlevlere genel bir bakış sağlar.

Yeni runtime sınıfları

Aşağıdaki runtime sınıfları Adobe AIR uygulamasında yenidir. Tarayıcıda çalışan SWF içeriği tarafından

kullanılamaz.

Sınıf Paket

BrowserInvokeEvent flash.events

Clipboard flash.desktop

ClipboardFormats flash.desktop

ClipboardTransferMode flash.desktop

CompressionAlgorithm flash.utils

DockIcon flash.desktop

DRMAuthenticateEvent flash.events

DRMErrorEvent flash.events

DRMStatusEvent flash.events

EncryptedLocalStore flash.data

File flash.filesystem

FileListEvent flash.events

FileMode flash.filesystem

FileStream flash.filesystem

FocusDirection flash.display

HTMLHistoryItem flash.html

HTMLHost flash.html

HTMLLoader flash.html

HTMLPDFCapability flash.html

HTMLUncaughtScriptExceptionEvent flash.events

HTMLWindowCreateOptions flash.html

Icon flash.desktop

InteractiveIcon flash.desktop

Page 57: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

50ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Adobe AIR uygulamasındaki yeni işlevler

InvokeEvent flash.events

NativeApplication flash.desktop

NativeDragActions flash.desktop

NativeDragEvent flash.events

NativeDragManager flash.desktop

NativeDragOptions flash.desktop

NativeMenu flash.display

NativeMenuItem flash.display

NativeWindow flash.display

NativeWindowBoundsEvent flash.events

NativeWindowDisplayState flash.display

NativeWindowDisplayStateEvent flash.events

NativeWindowInitOptions flash.display

NativeWindowResize flash.display

NativeWindowSystemChrome flash.display

NativeWindowType flash.display

NotificationType flash.desktop

OutputProgressEvent flash.events

RevocationCheckSettings flash.security

Screen flash.display

ScreenMouseEvent flash.events

SignatureStatus flash.security

SignerTrustSettings flash.security

SQLCollationType flash.data

SQLColumnNameStyle flash.data

SQLColumnSchema flash.data

SQLConnection flash.data

SQLError flash.errors

SQLErrorEvent flash.events

SQLErrorOperation flash.errors

SQLEvent flash.events

SQLIndexSchema flash.data

SQLResult flash.data

SQLSchema flash.data

Sınıf Paket

Page 58: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

51ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Adobe AIR uygulamasındaki yeni işlevler

Ayrıca flash.security paketi IURIDereferencer arabirimini de içerir.

Yeni işlevlere sahip runtime sınıfları

Aşağıdaki sınıflar tarayıcıda çalışan SWF içeriği tarafından kullanılabilir, ancak AIR ek özellikler veya yöntemler

sağlar:

SQLSchemaResult flash.data

SQLStatement flash.data

SQLTableSchema flash.data

SQLTransactionLockType flash.data

SQLTriggerSchema flash.data

SQLUpdateEvent flash.events

SQLViewSchema flash.data

SystemTrayIcon flash.desktop

Updater flash.desktop

URLRequestDefaults flash.net

XMLSignatureValidator flash.utils

Sınıf Özellik veya Yöntem

Capabilities diller

Event DISPLAYING

EXITING

HTML_BOUNDS_CHANGE

HTML_DOM_INITIALIZE

HTML_RENDER

LOCATION_CHANGE

NETWORK_CHANGE

USER_IDLE

USER_PRESENT

FileReference uploadUnencoded()

HTTPStatusEvent HTTP_RESPONSE_STATUS

responseURL

responseHeaders

KeyboardEvent commandKey

controlKey

LoaderContext allowLoadBytesCodeExecution

Sınıf Paket

Page 59: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

52ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Adobe AIR uygulamasındaki yeni işlevler

Bu yeni özelliklerin ve yöntemlerin çoğu yalnızca AIR uygulaması güvenlik sanal alanındaki içerik tarafından

kullanılabilir. Ancak URLRequest sınıflarındaki yeni üyeler, diğer sanal alanlarda çalışan içerik tarafından da

kullanılabilir.

ByteArray.compress() ve ByteArray.uncompress() yöntemlerinin her biri yeni bir algorithm parametresi

içerir, böylece deflate ve zlib sıkıştırmaları arasında seçim yapabilirsiniz.

Hizmet izleme çerçevesi sınıfları

air.net paketi ağ algılamasına yönelik sınıfları içerir. Bu paket yalnızca Adobe AIR uygulamasında çalışan içerik

tarafından kullanılır. ServiceMonitor.swc dosyasına dahildir.

Pakette aşağıdaki sınıflar bulunur:

• ServiceMonitor

• SocketMonitor

• URLMonitor

LoaderInfo parentSandboxBridge

childSandboxBridge

NetStream resetDRMVouchers()

setDRMAuthenticationCredentials()

URLRequest followRedirects

manageCookies

shouldAuthenticate

shouldCacheResponse

userAgent

userCache

setLoginCredentials()

URLStream httpResponseStatus olayı

Stage nativeWindow

Security APPLICATION

Sınıf Özellik veya Yöntem

Page 60: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

53

Bölüm 10: Yerel pencerelerle çalışma

Masaüstü pencerelerini oluşturmak ve yönetmek için Adobe® AIR® yerel pencere API'si tarafından sağlanan sınıfları

kullanırsınız.

Yerel pencereler hakkında ek çevrimiçi bilgiler

Yerel pencere API'si ve yerel pencerelerle çalışma hakkında daha fazla bilgiyi aşağıdaki kaynaklarda bulabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• Bir pencereyle etkileşim kurma

• Yerel bir pencerenin görünümünü ve verdiği hissi özelleştirme

• Tost stili pencereler oluşturma

• Pencerelerin görüntü sırasını denetleme

• Yeniden boyutlandırılabilir, dikdörtgen olmayan pencereler oluşturma

Dil Başvurusu

• NativeWindow

• NativeWindowInitOptions

Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri

• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR pencereleri'ni arama)

AIR penceresi temelleri

AIR, Flash®, Flex™ ve HTML programlama tekniklerini kullanarak yerel işletim sistemi pencereleri oluşturmak için

kullanımı kolay, platformlar arası bir pencere API'si sunar.

AIR'le uygulamanızın görünümünü geliştirmede büyük bir özgürlüğe sahip olursunuz. Oluşturduğunuz pencereler

Mac'te çalışırken Apple stiline veya Windows'ta çalışırken Microsoft yöntemlerine uyacak biçimde standart bir

masaüstü uygulaması gibi görünebilir. Veya uygulamanız nerede çalışırsa çalışsın kendi stilinizi oluşturmak için Flex

çerçevesinin sağladığı skin desteği olan, genişletilebilir kromu kullanabilirsiniz. Masaüstüne karşı şeffaflık ve alfa

harmanlaması için tam destek sağlayan vektör ve bitmap resimleriyle kendi pencerelerinizi de çizebilirsiniz.

Dikdörtgen pencerelerden sıkıldınız mı? Yuvarlak bir tane çizin.

AIR'deki Pencereler

AIR, pencerelerle çalışmak için üç ayrı API sağlar: ActionScript yönelimli NativeWindow sınıfı, NativeWindow

sınıfını sarak Flex çerçevesi mx:WindowedApplication ve mx:Window sınıfları ve HTML ortamındaki JavaScript

Window sınıfı.

Page 61: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

54ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

ActionScript pencereleri

Bir NativeWindow sınıfıyla pencereler oluşturduğunuzda, Flash Player sahnesini kullanın ve listeyi doğrudan

görüntüleyin. Bir NativeWindow öğesine görsel bir nesne eklemek için, nesneyi pencere sahnesinin görüntü listesine

veya bu sahnedeki başka bir görüntüleme nesnesine ekleyin.

Flex Framework pencereleri

Flex Framework, NativeWindow API'sini saran kendi pencere bileşenlerini tanımlar. Bu bileşenler, yani

mx:WindowedApplication ve mx:Window, çerçeve dışında kullanılamaz ve bu nedenle Flash Authoring ile

geliştirilmiş AIR uygulamalarında kullanılamazlar.

HTML pencereleri

HTML pencereleri oluşturduğunuzda, içeriği görüntülemek için HTML, CSS ve JavaScript kullanırsınız. HTML

penceresine görsel bir nesne eklemek için, bu içeriği HTML DOM'a eklersiniz. HTML pencereleri, NativeWindow

öğesinin özel bir kategorisidir. AIR ana bilgisayarı HTML pencerelerinde temel NativeWindow örneğine erişim

sağlayan bir nativeWindow özelliği tanımlar. Bu özelliği burada açıklanan NativeWindow özellikleri, yöntemleri ve

olaylarına erişmek için kullanabilirsiniz.

Not: JavaScript Window nesnesi de, mevcut pencere için komut dosyası oluşturmaya yönelik moveTo() ve close() gibi

yöntemlere sahiptir. Örtüşen yöntemler olduğunda, en uygun yöntemi kullanabilirsiniz.

İlk uygulama penceresi

Uygulamanızın ilk penceresi sizin için AIR tarafından otomatik olarak oluşturulur. AIR, uygulama tanımlayıcı

dosyasının initialWindow öğesinde belirtilen parametreleri kullanarak pencere özelliklerini ve içeriğini ayarlar.

Kök içerik bir SWF dosyası ise, AIR bir NativeWindow örneği oluşturur, SWF dosyasını yükler, ve bunu pencere

sahnesine ekler. Kök içerik bir HTML dosyası ise, AIR bir HTML penceresi oluşturur ve HTML'i yükler.

Uygulama tanımlayıcısında belirtilen pencere özellikleri hakkında daha fazla bilgi için bkz. “Uygulama tanımlayıcı

dosyasının yapısı” sayfa 41.

Yerel pencere sınıfları

Yerel pencere API'si aşağıdaki sınıfları içerir:

Page 62: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

55ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Yerel pencere olay akışı

Yerel pencereler, ilgili bileşenleri önemli bir değişikliğin gerçekleşmek üzere olduğuna veya gerçekleştiğine dair

bilgilendirmek için olaylar gönderir. Birçok pencere ilişkili olay, çiftler halinde gönderilir. İlk olay, bir değişikliğin

gerçekleşmek üzere olduğuna dair uyarır. İkinci olay, değişikliğin yapıldığını bildirir. Bir uyarı olayını iptal

edebilirsiniz, ancak bir bildirim olayını iptal edemezsiniz. Aşağıdaki sıra, kullanıcı pencerenin büyütme düğmesini

tıklattığında gerçekleşen olay akışını gösterir:

1 NativeWindow nesnesi bir displayStateChanging olayı gönderir.

2 Hiçbir kayıtlı kullanıcı olayı iptal etmezse, pencere büyür.

3 NativeWindow nesnesi bir displayStateChange olayı gönderir.

NativeWindow nesnesi ayrıca pencere boyutu ve konumuyla ilgili değişiklikler için de olaylar gönderir. Pencere,

bu ilgili değişiklikler için uyarı olayları göndermez. İlgili değişiklikler şunlardır:

a Büyütme işlemi nedeniyle pencerenin sol üst köşesi hareket ettiğinde move olayı gönderilir.

b Büyütme işlemi nedeniyle pencere boyutu değiştiğinde resize olayı gönderilir.

Bir NativeWindow nesnesi, pencereyi simge durumuna küçültme, yeniden yükleme, kapatma, taşıma ve yeniden

boyutlandırma sırasında olayları benzer bir sırayla gönderir.

Uyarı olayları yalnızca, pencere kromu veya başka işletim sistemin tarafından kontrol edilen bir mekanizma bir

değişiklik başlattığında gönderilir. Pencere boyutu, konumu veya görüntü durumunu değiştirmek için bir window

yöntemini çağırdığınızda, pencere yalnızca değişikliği bildirmek için bir olay gönderir. İsterseniz pencere

dispatchEvent() yöntemini kullanarak bir uyarı olayı gönderebilir ve değişiklik devam etmeden önce uyarı

olayınızın iptal edilip edilmediğini kontrol edebilirsiniz.

Pencere API sınıfları, yöntemleri, özellikleri ve olayları hakkında ayrıntılı bilgi için bkz. ActionScript 3.0 Dil ve

Bileşen Başvurusu (http://www.adobe.com/go/learn_flash_aslr_tr).

Paket Sınıflar

flash.display • NativeWindow

• NativeWindowInitOptions

• NativeWindowDisplayState

• NativeWindowResize

• NativeWindowSystemChrome

• NativeWindowType

Pencere dizesi sabitleri aşağıdaki sınıflarda tanımlanmıştır:

• NativeWindowDisplayState

• NativeWindowResize

• NativeWindowSystemChrome

• NativeWindowType

flash.events • NativeWindowBoundsEvent

• NativeWindowDisplayStateEvent

Page 63: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

56ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Flash görüntü listesi kullanımı hakkında genel bilgi için ActionScript 3.0'ı Programlama

(http://www.adobe.com/go/programmingAS3_tr) başvurusunun “Görüntü Programlama” bölümüne bakın.

Yerel pencere stili ve davranışını denetleyen özellikler

Aşağıdaki özellikler, bir pencerenin temel görünümü ve davranışını denetler:

• type

• systemChrome

• transparent

Bir pencere oluşturduğunuzda, pencere yapıcısına iletilen NativeWindowInitOptions nesnesindeki bu özellikleri

ayarlarsınız. AIR, özellikleri ilk uygulama penceresi için uygulama tanımlayıcısından okur. (Uygulama

tanımlayıcısında ayarlanamayan ve her zaman normal olarak ayarlanmış olan type özelliği hariç.) Bu özellikler

pencere oluşturulduktan sonra değiştirilemez.

Bu özelliklerin bazı ayarları birbirleriyle uyumsuzdur: transparent özelliği true olarak veya type özelliği hafif

olarak ayarlandığında systemChrome özelliği standart olarak ayarlanamaz.

Pencere türleri

AIR pencere türleri, üç işlevsel pencere türü oluşturmak için yerel işletim sisteminin krom ve görünürlük niteliklerini

birleştirir. Koddaki tür adlarına başvurmak için NativeWindowType sınıfında tanımlanan sabitleri kullanın. AIR,

aşağıdaki pencere türlerini sağlar:

Pencere kromu

Pencere kromu, kullanıcıların masaüstü ortamında bir pencereyi değiştirmesine olanak veren denetimlerin kümesidir.

Krom öğeleri, başlık çubuğu, başlık çubuğu düğmeleri, kenarlık ve yeniden boyutlandırma kıskaçlarını içerir.

Sistem kromu

systemChrome özelliğini standart veya yok olarak ayarlayabilirsiniz. Pencerenize kullanıcının işletim sistemi

tarafından oluşturulan ve stillendirilen standart denetimler kümesini vermek için standart sistem kromunu seçin.

Pencere için kendi kromunuzu sağlamak istiyorsanız yok olarak ayarlayın. Koddaki sistem kromu ayarlarına

başvurmak için NativeWindowSystemChrome sınıfında tanımlanan sabitleri kullanın.

Sistem kromu sistem tarafından yönetilir. Uygulamanızın denetimlerin kendisine doğrudan erişimi yoktur, ancak

denetimler kullanıldığında gönderilen olaylara tepki verebilir. Pencere için standart krom kullandığınızda,

transparent özelliği false olarak ve type özelliği normal veya hizmet olarak ayarlanmalıdır.

Tür Açıklama

Normal Tipik bir pencere. Normal pencereler tam boyutlu krom stilini kullanır ve Windows görev çubuğu ile Mac OS X

pencere penüsünde görünürler.

Hizmet penceresi Bir araç paleti. Hizmet pencereleri sistem kromunun daha ince bir versiyonunu kullanır ve Windows görev

çubuğu ile Mac OS X pencere menüsünde görünmezler.

Hafif Hafif pencereler krom içermez ve Windows görev çubuğunda veya Mac OS X pencere menüsünde

görünmezler. Ayrıca, hafif pencereler Windows'ta Sistem (Alt+Ara çubuğu) menüsü içermezler. Hafif

pencereler, açılır kutular gibi kısa süreli görüntü alanları açan bildirim kabarcıkları ve denetimler için uygundur.

type özelliği hafif olarak ayarlandığında systemChrome özelliği yok olarak ayarlanmalıdır.

Page 64: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

57ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Özel krom

Sistem kromu olmadan bir pencere oluşturduğunuzda, kullanıcı ve pencere arasındaki etkileşimleri işlemek için kendi

krom denetimlerinizi eklemeniz gerekir. Dikdörtgen olmayan, şeffaf pencereler de yapabilirsiniz.

Pencere şeffaflığı

Bir pencerenin masaüstü veya diğer pencerelerle alfa harmanlamasına izin vermek için transparent özelliğini true

olarak ayarlayın. transparent özelliği pencere oluşturulmadan ayarlanmalıdır ve değiştirilemez.

Şeffaf bir pencerenin varsayılan bir arka planı yoktur. Uygulama tarafından çizilen, nesne içermeyen pencere alanları

görünmezdir. Görüntülenen bir nesne birden küçük bir alfa ayarına sahipse, aynı penceredeki, diğer pencerelerdeki ve

masaüstündeki görüntüleme nesneleri de dahil nesnenin altındaki her şey görünür. Alfa harmanlamalı büyük alanlar

oluşturmak uzun sürebilir, bu nedenle efekt tutumlu kullanılmalıdır.

Şeffaf pencereler, şekil açısından düzensiz olan, “yavaşça kaybolan” veya görünmez olan kenarlıklara sahip

uygulamalar oluşturmak istediğinizde kullanışlıdır.

Şeffaflık, sistem kromu içeren pencerelerle kullanılamaz. Ayrıca, HTML'deki SWF ve PDF içeriği şeffaf pencerelerde

görüntülenmez. Daha fazla bilgi için bkz. “HTML sayfasına SWF ve PDF içeriği yüklenirken dikkate alınması

gerekenler” sayfa 231.

Bazı işletim sistemlerinde, donanım ve yazılım yapılandırması veya kullanıcı görüntü seçenekleri nedeniyle şeffaflık

desteklenmeyebilir. Şeffaflık desteklenmediğinde, uygulama siyah bir arka plana karşı birleştirilir. Bu durumlarda,

uygulamanın tamamen şeffaf olan alanları opak siyah olarak görüntülenir.

Statik NativeWindow.supportsTransparency özelliği, pencere şeffaflığının kullanılabilir olup olmadığını bildirir.

Bu özellik false olduğunda, örneğin, kullanıcıya bir uyarı iletişim kutusu veya geri dönüşlü, dikdörtgen, şeffaf

olmayan bir kullanıcı arabirimi görüntüleyebilirsiniz. Şeffaflığın Mac ve Windows işletim sistemleri tarafından her

zaman desteklendiğini unutmayın. Linux işletim sistemlerinde destek, bileşik bir pencere yöneticisi gerektirir, ancak

yine de kullanıcının görüntü seçenekleri veya donanım yapılandırması nedeniyle kullanılamayabilir.

HTML uygulama penceresinde şeffaflık

İçinde bulunduğu pencere şeffaf olsa bile, HTML pencereleri ve HTMLLoader nesnelerinde görüntülenen HTML

içeriğinin arka planı varsayılan olarak opaktır. HTML içeriği için görüntülenen varsayılan arka planı kapatmak için,

paintsDefaultBackground özelliğini false olarak ayarlayın. Aşağıdaki örnek bir HTMLLoader oluşturur ve

varsayılan arka planı kapatır:

var html:HTMLLoader = new HTMLLoader(); html.paintsDefaultBackground = false;

Bu örnek, bir HTML penceresinin varsayılan arka planını kapatmak için JavaScript kullanır:

window.htmlLoader.paintsDefaultBackground = false;

HTML belgesinde bulunan bir öğe, bir arka plan rengi ayarlıyorsa, bu öğenin arka planı şeffaf olmaz. Kısmi bir şeffaflık

(veya opaklık) değerinin ayarlanması desteklenmez. Ancak, benzer bir görsel efekt elde etmek için PNG formatındaki

şeffaf bir grafiği bir sayfanın veya sayfa öğesinin arka planı olarak kullanabilirsiniz.

Görsel bir pencere kataloğu

Aşağıdaki tablo, pencere özellik ayarlarının Mac OS X ve Windows işletim sistemlerindeki farklı bileşimlerinin

oluşturduğu görsel efektleri gösterir:

Page 65: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

58ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Not: Aşağıdaki sistem kromu öğeleri AIR tarafından desteklenmez: OS X Araç Çubuğu, OS X Proxy Simgesi, Windows

başlık çubuğu simgeleri ve alternatif sistem kromu.

Pencereler oluşturma

AIR, bir uygulama için ilk pencereyi otomatik olarak oluşturur, ancak ihtiyacınız olan ek pencereleri oluşturabilirsiniz.

Yerel bir pencere oluşturmak için NativeWindow yapıcı yöntemini kullanın. HTML penceresi oluşturmak için

HTMLLoader createRootWindow() yöntemini kullanın veya bir HTML belgesinden JavaScript window.open()

yöntemini çağırın.

Pencere ayarları Mac OS X Microsoft Windows

Type: normal

SystemChrome: standart

Transparent: false

Type: hizmet

SystemChrome: standart

Transparent: false

Type: Herhangi biri

SystemChrome: yok

Transparent: false

Type: Herhangi biri

SystemChrome: yok

Transparent: true

mxWindowedApplication veya

mx:Window

Type: Herhangi biri

SystemChrome: yok

Transparent: true

Page 66: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

59ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Pencere başlatma özelliklerini belirleme

Pencerenin başlatma özellikleri, masaüstü penceresi oluşturulduktan sonra değiştirilemez. Bu sabit özellikler ve

varsayılan değerleri şunlardır:

Uygulama tanımlayıcı dosyasında AIR tarafından oluşturulan ilk pencereye ilişkin özellikleri ayarlayın. AIR

uygulamasının ana penceresine ilişkin type özelliği her zaman normal olarak ayarlanır. (Tanımlayıcı dosyada

visible, width ve height gibi ek pencere özellikleri belirtilebilir, ancak bu özellikler her zaman değiştirilebilir.)

Uygulamanız tarafından NativeWindowInitOptions sınıfı kullanılarak oluşturulan diğer yerel pencereler ve HTML

pencereleri için özellikleri ayarlayın. Bir pencere oluşturduğunuzda, pencere özelliklerini belirten bir

NativeWindowInitOptions nesnesini NativeWindow yapıcı işlevine veya HTMLLoader createRootWindow()

yöntemine iletmelisiniz.

Aşağıdaki kod, bir hizmet penceresi için NativeWindowInitOptions nesnesi oluşturur:

var options:NativeWindowInitOptions = new NativeWindowInitOptions(); options.systemChrome = NativeWindowSystemChrome.STANDARD; options.type = NativeWindowType.UTILITY options.transparent = false; options.resizable = false; options.maximizable = false;

Transparent özelliği true olarak veya type özelliği hafif olarak ayarlandığında systemChrome özelliğinin standart

olarak ayarlanması desteklenmez.

Not: JavaScript window.open() işleviyle oluşturulan bir pencere için başlatma özelliklerini ayarlayamazsınız. Ancak,

kendi HTMLHost sınıfınızı uygulayarak bu pencerelerin oluşturulma biçimini geçersiz kılabilirsiniz. Daha fazla bilgi

için bkz. “window.open() için JavaScript çağrılarını işleme” sayfa 239.

İlk uygulama penceresini oluşturma

AIR, ilk uygulama penceresini uygulama tanımlayıcısında belirtilen özellikler temelinde oluşturur ve içerik öğesinde

başvurulan dosyayı yükler. İçerik bir SWF veya bir HTML dosyası olmalıdır.

Başlangıç penceresi, uygulamanızın ana penceresi olabilir veya yalnızca bir veya daha çok farklı pencerenin

başlatılması için görev yapabilir. Bu pencereyi görünür yapmanız gerekmez.

Flash geliştirme aracı, otomatik olarak bir SWF dosyası oluşturur ve siz AIR için bir projeyi test ederken veya

yayınlarken uygulama tanımlayıcısına uygun bir başvuru ekler. Ana zaman çizelgesi, uygulamanız için giriş noktası

olarak görev yapar.

Uygulamanız başladığında, AIR bir pencere oluşturur ve uygulama SWF dosyasını yükler. Masaüstü penceresini

ActionScript ile denetlemek için NativeWindow nesnesine başvuru almak üzere Stage nesnesinin nativeWindow

özelliğini kullanırsınız. Daha sonra window ve call window yöntemlerinin özelliklerini ayarlayabilirsiniz.

Özellik Varsayılan değer

systemChrome standard

type normal

transparent false

maximizable true

minimizable true

resizable true

Page 67: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

60ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Aşağıdaki örnek, büyütülmüş durumdaji ana pencereyi etkinleştirir (Flash FLA'nın ana karesinden):

import flash.display.NativeWindow; var mainWindow:NativeWindow = this.stage.nativeWindow; mainWindow.maximize(); mainWindow.activate();

Bir NativeWindow oluşturma

Bir NativeWindow oluşturmak için, NativeWindowInitOptions nesnesini NativeWindow yapıcısına iletin:

var options:NativeWindowInitOptions = new NativeWindowInitOptions(); options.systemChrome = NativeWindowSystemChrome.STANDARD; options.transparent = false; var newWindow:NativeWindow = new NativeWindow(options);

Siz visible özelliğini true olarak ayarlayana veya activate() yöntemini çağırana kadar pencere görüntülenmez.

Pencere oluşturulduğunda, özelliklerini başlatabilir ve sahne özelliğiyle Flash görüntü listesi tekniklerini kullanarak

pencereye içerik yükleyebilirsiniz.

Neredeyse her durumda, yeni bir yerel pencerenin scaleMode özelliğini noScale olarak ayarlamalısınız

(StageScaleMode.NO_SCALE sabitini kullanın). Flash ölçek modları, uygulama geliştiricisinin uygulama görüntüsüne

ait en boy oranını önceden bilmediği durumlar için tasarlanmıştır. Ölçek modları, geliştiricinin en uygun dengeyi

seçmesine olanak verir: içeriği kesme, uzatma veya sıkıştırma, ya da boş alanla doldurma. AIR'de görüntü alanını

(pencere karesi) denetleyebildiğiniz için, pencereyi içeriğe veya içeriği pencereye göre ödün vermeden

boyutlandırabilirsiniz.

Not: Geçerli işletim sisteminde izin verilen maksimum ve minimum pencere boyutlarını belirlemek için aşağıdaki statik

NativeWindow özelliklerini kullanın:

var maxOSSize:Point = NativeWindow.systemMaxSize; var minOSSize:Point = NativeWindow.systemMinSize;

Bir HTML penceresi oluşturma

Bir HTML penceresi oluşturmak için JavaScript Window.open() yöntemini veya AIR HTMLLoader sınıfının

createRootWindow() yöntemini çağırabilirsiniz.

Herhangi bir güvenlik sanal alanındaki HTML özelliği JavaScript Window.open() yöntemini kullanabilir. İçerik

uygulama sanal alanının dışında çalışıyorsa, open() yöntemi yalnızca fare tıklatması veya tuşa basma gibi bir kullanıcı

etkileşimine yanıt olarak çağrılabilir. open() yöntemi çağrıldığında, belirtilen URL'deki içeriği görüntülemek için

sistem kromu içeren bir pencere oluşturulur. Örneğin:

newWindow = window.open("xmpl.html", "logWindow", "height=600, width=400, top=10, left=10");

Not: JavaScript window.open() işleviyle oluşturulan pencereyi özelleştirmek için ActionScript'teki HTMLHost sınıfını

genişletebilirsiniz. Bkz. “HTMLHost sınıfının genişletilmesi hakkında” sayfa 235

Uygulama güvenlik sanal alanındaki içerik, daha güçlü HTMLLoader.createRootWindow() pencere oluşturma

yöntemine erişime sahiptir. Bu yöntemle, yeni bir pencereye ilişkin tüm oluşturma seçeneklerini belirleyebilirsiniz.

Örneğin, aşağıdaki JavaScript kodu 300x400 boyutunda, sistem kromu içermeyen hafif bir pencere oluşturur:

Page 68: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

61ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

var options = new air.NativeWindowInitOptions(); options.systemChrome = "none"; options.type = "lightweight"; var windowBounds = new air.Rectangle(200,250,300,400); newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds); newHTMLLoader.load(new air.URLRequest("xmpl.html"));

Not: Yeni bir pencere tarafından yüklenen içerik uygulama güvenlik sanal alanının dışındaysa, pencere nesnesi AIR

özelliklerine sahip değildir: runtime, nativeWindow veya htmlLoader.

createRootWindow() yöntemiyle oluşturulan pencereler, açılan pencereden bağımsız kalırlar. JavaScript Window

nesnesinin parent ve opener özellikleri null değerindedir. Açılan pencere, createRootWindow() işlevinin

döndürdüğü HTMLLoader başvurusunu kullanarak yeni pencerenin Window nesnesine erişebilir. Önceki örnek

bağlamında, newHTMLLoader.window ifadesi oluşturulan pencerenin JavaScript Window nesnesine başvurur.

Not: createRootWindow() işlevi, JavaScript ve ActionScript'ten çağrılabilir.

Bir pencereye içerik ekleme

Bir AIR penceresine nasıl içerik eklediğiniz, pencerenin türüne bağlıdır. Bir film klibi oluşturabilir ve uygulama

durumunu denetlemek için zaman çizelgesini kullanabilirsiniz. HTML ile pencerenin temel içeriğini tanıtıcı biçimde

tanımlayabilirsiniz. Kaynakları SWF uygulamasına gömebilir veya ayrı uygulama dosyalarından yükleyebilirsiniz.

Flash ve HTML içeriği anında oluşturulabilir ve bir pencereye dinamik olarak eklenebilir.

SWF içeriği veya JavaScript içeren HTML içeriği yüklerken, AIR güvenlik modelini dikkate almalısınız. Uygulama

güvenlik sanal alanındaki, yani uygulamanızla yüklenen ve app ile yüklenebilen her içerik: URL şeması, tüm AIR

API'lerine erişmek için tüm ayrıcalıklara sahiptir. Bu sanal alanın dışından yüklenen her içerik AIR API'lerine

erişemez. Uygulama sanal alanının dışındaki JavaScript içeriği JavaScript Window nesnesinin runtime,

nativeWindow veya htmlLoader özelliklerini kullanamaz.

Güvenli çapraz komut dosyası oluşturmayı sağlamak için, uygulama içeriği ve uygulama dışı içerik arasında sınırlı bir

arabirim sağlamak üzere sanal alan köprüsünü kullanabilirsiniz. HTML içeriğinde, bu sayfadaki kodun harici içeriğe

ilişkin çapraz komut dosyası oluşturmasına izin vermek için uygulamanızın sayfalarını uygulama dışı bir sanal alana

eşleyebilirsiniz. Bkz. “AIR güvenliği” sayfa 23.

SWF veya görüntü yükleme

flash.display.Loader sınıfını kullanarak yerel bir pencerenin görüntü listesine Flash veya görüntüler

yükleyebilirsiniz:

Page 69: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

62ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.display.Loader; public class LoadedSWF extends Sprite { public function LoadedSWF(){ var loader:Loader = new Loader(); loader.load(new URLRequest("visual.swf")); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadFlash); } private function loadFlash(event:Event):void{ addChild(event.target.loader); } } }

HTML tabanlı bir uygulamada kullanım için kitaplık kodu içeren bir SWF dosyası yükleyebilirsiniz. Bir HTML

penceresine SWF yüklemenin en basit yolu script etiketini kullanmaktır, ancak doğrudan Loader API'sini de

kullanabilirsiniz.

Not: ActionScript 1 veya 2 kullanılarak oluşturulan daha eski SWF dosyaları, aynı pencereye yüklendiklerinde sınıf

tanımları, tek ve genel değişkenler gibi genel durumları paylaşırlar. Buna benzer bir SWF dosyası doğru çalışmak için

dokunulmamış genel durumlara dayanıyorsa, aynı pencereye bir defadan fazla veya örtüşen sınıf tanımları veya

değişkenleri kullanılarak başka bir SWF dosyasıyla aynı pencereye yüklenemez. Bu içerik ayrı pencerelere yüklenebilir.

Bir NativeWindow'a HTML içeriği yükleme

Bir NativeWindow'a HTML içeriği yüklemek için HTMLLoader nesnesini pencere sahnesine ekleyip HTML içeriğini

HTMLLoader öğesine yükleyebilir veya HTMLLoader.createRootWindow() yöntemini kullanarak önceden bir

HTMLLoader nesnesi içeren bir pencere oluşturabilirsiniz. Aşağıdaki örnek, HTML içeriğini yerel pencere sahnesinde

300x500 piksel boyutundaki görüntü alanında görüntüler:

//newWindow is a NativeWindow instance var htmlView:HTMLLoader = new HTMLLoader(); html.width = 300; html.height = 500; //set the stage so display objects are added to the top-left and not scaled newWindow.stage.align = "TL"; newWindow.stage.scaleMode = "noScale"; newWindow.stage.addChild( htmlView ); //urlString is the URL of the HTML page to load htmlView.load( new URLRequest(urlString) );

Not: HTML dosyasındaki SWF veya PDF içeriği, pencere şeffaflık kullanıyorsa (pencerenin transparent özelliği true

ise) veya HTMLLoader denetimi ölçeklendiyse görüntülenmez.

SWF içeriğini HTML penceresine bir kaplama olarak ekleme

HTML pencereleri bir NativeWindow örneğinin içinde bulunduğundan, Flash görüntü nesnelerini görüntü

listesindeki HTML katmanının üstüne ve altına ekleyebilirsiniz.

Page 70: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

63ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Bir görüntü nesnesini HTML katmanının üstüne eklemek için window.nativeWindow.stage özelliğinin

addChild() yöntemini kullanın. addChild() yöntemi, katmanlı içeriği pencerede bulunan tüm içeriğin üzerine

ekler.

HTML katmanının altına bir görüntü nesnesi eklemek için, dizin parametresine ilişkin sıfır değerini ileterek,

window.nativeWindow.stage özelliğinin addChildAt() yöntemini kullanın Bir nesnenin sıfır dizinine

yerleştirilmesi, HTML görüntüsü de dahil var olan içeriği bir katman yukarı taşır ve yeni içeriği bunun altına ekler.

HTML sayfasının altındaki katmanlı içeriğin görünür olması için HTMLlLoader nesnesinin

paintsDefaultBackground özelliğini false olarak ayarlamalısınız. Ayrıca, bir arka plan rengi ayarlayan sayfanın

her öğesi şeffaf olmayacaktır. Örneğin sayfanın gövde öğesi için bir arka plan rengi ayarladığınızda, sayfanın hiçbir yeri

şeffaf olmaz.

Aşağıdaki örnek, Flash görüntü nesnelerinin bir HTML sayfasına kaplama ve altlık olarak nasıl ekleneceğini gösterir.

Örnek, iki basit şekil nesnesi oluşturarak bunlardan birini HTML içeriğinin altına, diğerini üstüne ekler. Örnek,

enterFrame olayını temel alan şekil konumunu da günceller.

<html> <head> <title>Bouncers</title> <script src="AIRAliases.js" type="text/javascript"></script> <script language="JavaScript" type="text/javascript"> air.Shape = window.runtime.flash.display.Shape; function Bouncer(radius, color){ this.radius = radius; this.color = color; //velocity this.vX = -1.3; this.vY = -1; //Create a Shape object and draw a circle with its graphics property this.shape = new air.Shape(); this.shape.graphics.lineStyle(1,0); this.shape.graphics.beginFill(this.color,.9); this.shape.graphics.drawCircle(0,0,this.radius); this.shape.graphics.endFill(); //Set the starting position this.shape.x = 100; this.shape.y = 100; //Moves the sprite by adding (vX,vY) to the current position this.update = function(){ this.shape.x += this.vX; this.shape.y += this.vY; //Keep the sprite within the window if( this.shape.x - this.radius < 0){ this.vX = -this.vX; } if( this.shape.y - this.radius < 0){ this.vY = -this.vY; } if( this.shape.x + this.radius > window.nativeWindow.stage.stageWidth){

Page 71: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

64ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

this.vX = -this.vX; } if( this.shape.y + this.radius > window.nativeWindow.stage.stageHeight){ this.vY = -this.vY; } }; } function init(){ //turn off the default HTML background window.htmlLoader.paintsDefaultBackground = false; var bottom = new Bouncer(60,0xff2233); var top = new Bouncer(30,0x2441ff); //listen for the enterFrame event window.htmlLoader.addEventListener("enterFrame",function(evt){ bottom.update(); top.update(); }); //add the bouncing shapes to the window stage window.nativeWindow.stage.addChildAt(bottom.shape,0); window.nativeWindow.stage.addChild(top.shape); } </script> <body onload="init();"> <h1>de Finibus Bonorum et Malorum</h1> <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p> <p style="background-color:#FFFF00; color:#660000;">This paragraph has a background color.</p> <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.</p> </body> </html>

Bu örnek, AIR'de ActionScript ve JavaScript arasındaki sınırları aşan bazı gelişmiş tekniklere temel bir giriş sağlar.

ActionScript görüntü nesneleri kullanmaya alışık değilseniz, daha fazla bilgi için lütfen ActionScript 3.0'ı

Programlama kılavuzunun Görüntü Programlama bölümüne başvurun.

Örnek: Yerel bir pencere oluşturma

Aşağıdaki örnek, yerel bir pencerenin nasıl oluşturulacağını gösterir:

Page 72: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

65ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

public function createNativeWindow():void { //create the init options var options:NativeWindowInitOptions = new NativeWindowInitOptions(); options.transparent = false; options.systemChrome = NativeWindowSystemChrome.STANDARD; options.type = NativeWindowType.NORMAL; //create the window var newWindow:NativeWindow = new NativeWindow(options); newWindow.title = "A title"; newWindow.width = 600; newWindow.height = 400; newWindow.stage.align = StageAlign.TOP_LEFT; newWindow.stage.scaleMode = StageScaleMode.NO_SCALE; //activate and show the new window newWindow.activate(); }

Pencereleri yönetme

Masaüstü pencerelerinin görünümünü, davranışını ve yaşam döngüsünü yönetmek için NativeWindow sınıfının

özelliklerinive yöntemlerini kullanırsınız.

Bir NativeWindow örneği alma

Bir pencereyi değiştirmek için önce pencere örneğini almalısınız. Pencere örneğini aşağıdaki konumlardan birinden

alabilirsiniz:

Pencere yapıcısı Bu, yeni NativeWindow için pencere yapıcısıdır.

Pencere sahnesi Bu, stage.nativeWindow öğesidir.

Sahnedeki herhangi bir görüntü nesnesi Bu, myDisplayObject.stage.nativeWindow öğesidir.

Bir pencere olayı Olay nesnesinin target özelliği, olayı gönderen pencereye başvurur.

HTMLLoader veya HTML penceresinin genel nativeWindow özelliği Bu, window.nativeWindow öğesidir.

nativeApplication nesnesi NativeApplication.nativeApplication.activeWindow uygulamanın etkin

penceresine başvurur (ancak, etkin pencere bu AIR uygulamasına ait bir pencere değilse null değerini döndürür).

NativeApplication.nativeApplication.openedWindows dizisi, AIR uygulamasındaki kapatılmamış tüm

pencereleri içerir.

Pencereleri etkinleştirme, gösterme ve gizleme

Bir pencereyi etkinleştirmek için NativeWindow activate() yöntemini çağırın. Bir pencerenin etkinleştirilmesi

pencereyi öne çıkarır, ona klavye ve fare odağı kazandırır ve gerektiğinde pencereyi yeniden yükleyerek veya visible

özelliğini true olarak ayarlayarak pencereyi görünür duruma getirir. Bir pencereni etkinleştirilmesi uygulamadaki

diğer pencerelerin sırasını değiştirmez. Activate() yönteminin çağrılması, pencerenin activate olayı

göndermesine neden olur.

Bir pencereyi etkinleştirmeden göstermek için visible özelliğini true olarak ayarlayın. Bu, pencereyi öne çıkarır,

ancak odağı pencereye atamaz.

Page 73: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

66ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Bir pencereyi görünümden gizlemek için, visible özelliğini false olarak ayarlayın. Bir pencerenin gizlenmesi

pencereyi, ilgili görev çubuğu simgelerini ve Mac OS X'te Pencereler menüsündeki girişi engeller.

Not: Mac OS X'te, dock simgesi içeren simge durumuna küçültülmüş bir pencereyi tamamen gizlemek mümkün değildir.

Simge durumuna küçültülen bir pencerede visible özelliği false olarak ayarlandıysa, pencereye ilişkin dock simgesi

görüntülenmeye devam eder. Kullanıcı simgeyi tıklattığında, pencere görünür bir duruma yeniden yüklenir ve

görüntülenir.

Pencere görüntü sırasını değiştirme

AIR, pencerelerin görüntü sırasını doğrudan değiştirmek için birkaç yöntem sağlar. Bir pencereyi görüntü sırasının

önüne veya arkasına, bir pencereyi başka bir pencerenin üzerine veya ardına taşıyabilirsiniz. Aynı zamanda, kullanıcı

pencereleri etkinleştirerek yeniden sıralayabilir.

Bir pencerenin alwaysInFront özelliğini true olarak ayarlayarak, bu pencereyi diğer pencerelerin önünde

tutabilirsiniz. Birden çok pencere bu ayara sahip olduğunda, bu pencerelerin görüntü sırası kendi aralarında belirlenir,

ancak bu pencereler her zaman alwaysInFront özelliği false olarak ayarlanmış pencerelerin önünde sıralanır. AIR

uygulaması etkin olmadığında bile, en üst grupta yer alan pencereler diğer uygulamalardaki pencerelerin üzerinde

görüntülenir. Bu davranış kullanıcı için zorlayıcı olabileceğinden, alwaysInFront özelliği yalnızca gerekli ve uygun

olduğunda true olarak ayarlanmalıdır. Uygun kullanım örnekleri şunları içerir:

• Araç ipuçları, açılır listeler, özel menüler veya açılan kutular gibi denetimler için geçici açılır pencereler. Odağı

kaybettiklerinde bu tür pencerelerin kapatılmaları gerektiğinden, kullanıcının başka bir pencereyi

görüntülemesinin engellenmesi can sıkıcı olmayabilir.

• Çok acil hata mesajları ve uyarılar. Kullanıcının zamanında yanıt vermemesi durumunda kurtarılamayacak bir

değişikliğin gerçekleşme olasılığı, bir uyarı penceresini ekranın önüne taşımayı gerekli kılabilir. Ancak çoğu hata ve

uyarı, normal pencere görüntü sırasında işlenebilir.

• Kısa süreli tost stili pencereler.

Not: AIR, alwaysInFront özelliğinin uygun kullanımını zorlamaz. Ancak, uygulamanız bir kullanıcının iş akışını

aksatıyorsa, uygulamanın kullanıcının çöp kutusuna gönderilme ihtimali de yüksektir.

NativeWindow sınıfı, bir pencerenin diğer pencerelere göre görüntü sırasını ayarlamak için aşağıdaki özellikleri ve

yöntemleri sağlar:

Not: Bir pencere gizli (visible özelliği false) veya simge durumundaysa, görüntü sırası yöntemlerinin etkisi olmaz.

Üye Açıklama

alwaysInFront özelliği Pencerenin en üst pencere grubunda görüntülenip görüntülenmediğini belirtir.

Neredeyse her durumda, false en iyi ayardır. false değerinin true olarak değiştirilmesi pencereyi diğer

tüm pencerelerin önüne getirir (ancak pencereyi etkinleştirmez). true değerinin false olarak

değiştirilmesi pencereyi en üst grupta kalan pencerelerin arkasında, ancak hala diğer pencerelerin

önünde sıralar. Özelliğin bir pencere için geçerli değerine ayarlanması, pencere görüntü sırasını

değiştirmez.

orderToFront() Pencereyi öne getirir.

orderInFrontOf() Pencereyi belirli bir pencerenin önüne getirir.

orderToBack() Pencereyi diğer pencerelerin arkasına gönderir.

orderBehind() Pencereyi doğrudan belirli bir pencerenin arkasına gönderir.

activate() Pencereyi öne geçirir (pencereyi görünür duruma getirerek ve odağı pencereye atayarak).

Page 74: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

67ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Bir pencereyi kapatma

Bir pencereyi kapatmak için NativeWindow.close() yöntemini kullanın.

Bir pencerenin kapatılması pencere içeriğini boşaltır, ancak diğer nesneler bu içeriğe başvuruyorsa, içerik nesneleri

ortadan kaldırılmaz. NativeWindow.close() yöntemi senkronize olmayan biçimde yürütülür, pencerede bulunan

uygulama kapatma işlemi sırasında çalışmaya devam eder. Close yöntemi, kapatma işlemi başarılı olduğunda bile bir

close olayı gönderir. NativeWindow nesnesi teknik olarak hala geçerlidir, ancak çoğu özellik ve yönteme kapatılmış

bir pencerede erişmek, bir IllegalOperationError oluşturur. Kapatılan bir pencereyi yeniden açamazsınız. Pencerenin

kapanıp kapanmadığını test etmek için pencerenin closed özelliğini kontrol edin. Bir pencereyi görünümden

gizlemek için NativeWindow.visible özelliğini false olarak ayarlayın.

Nativeapplication.autoExit özelliği varsayılan true değerinde olduğunda, son pencere kapandığında uygulama

kapanır.

Pencere işlemlerinin iptaline izin verme

Bir pencere sistem kromu kullandığında, uygun olayların varsayılan davranışı dinlenerek veya iptal edilerek

kullanıcının pencereyle etkileşimi iptal edilebilir. Örneğin, bir kullanıcı sistem kromu kapatma düğmesini

tıklattığında, closing olayı gönderilir. Bir kayıtlı dinleyici olayın preventDefault() yöntemini çağırdığında,

pencere kapanmaz.

Pencere sistem kromu kullanmıyorsa, hedeflenen değişikliklerin bildirim olayları değişiklik yapılmadan önce

otomatik olarak gönderilmez. Bu nedenle, bir pencereyi kapatmaya, pencere durumunu değiştirmeye veya pencere

sınırı özelliklerinden birini ayarlamaya ilişkin yöntemleri çağırırsanız, değişiklik iptal edilemez. Pencere değişikliği

yapılmadan uygulamanızdaki bileşenleri bilgilendirmek için, uygulama mantığınız pencerenin dispatchEvent()

yöntemini kullanarak ilgili bildirim olayını gönderebilir.

Örneğin, aşağıdaki mantık bir pencere kapatma düğmesi için iptal edilebilir bir olay işleyicisi uygular:

public function onCloseCommand(event:MouseEvent):void{ var closingEvent:Event = new Event(Event.CLOSING,true,true); dispatchEvent(closing); if(!closingEvent.isDefaultPrevented()){ win.close(); } }

Olay preventDefault() yöntemi bir dinleyici tarafından çağrılırsa, dispatchEvent() yöntemi false değerini

döndürür. Ancak, bu yöntem başka nedenlerle de false değerini döndürebilir, bu nedenle değişikliğin iptal edilmesi

gerekip gerekmediğini test etmek için açıkça isDefaultPrevented() yöntemini kullanmak daha uygundur.

Bir pencereyi büyütme, simge durumuna küçültme ve geri yükleme

Pencereyi büyütmek için NativeWindow maximize() yöntemini kullanın.

myWindow.maximize();

Pencereyi simge durumuna küçültmek için NativeWindow minimize() yöntemini kullanın.

myWindow.minimize();

Pencereyi geri yüklemek için (yani, simge durumuna küçültülmeden veya büyütülmeden önceki boyutuna geri

döndürmek için), NativeWindow restore() yöntemini kullanın.

myWindow.restore();

Page 75: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

68ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Not: Bir AIR penceresini büyütme sonucunda ortaya çıkan davranış, Mac OS X standart davranışından farklıdır.

Uygulama tarafından tanımlanmış “standart” bir boyut ve kullanıcı tarafından ayarlanan son boyut arasında geçiş

yapmak yerine, AIR pencereleri uygulama veya kullanıcı tarafından ayarlanan son boyut ve ekranın tam kullanılabilir

alanı arasında geçiş yapar.

Örnek: Bir pencereyi simge durumuna küçültme, büyütme, geri yükleme ve

kapatma

Flash için aşağıdaki ActionScript örneği, NativeWindow minimize(), maximize(), restore() ve close()

yöntemlerini tetikleyen dört tıklatılabilir metin alanı oluşturur:

package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.text.TextField; public class MinimizeExample extends Sprite { public function MinimizeExample():void { var minTextBtn:TextField = new TextField(); minTextBtn.x = 10; minTextBtn.y = 10; minTextBtn.text = "Minimize"; minTextBtn.background = true; minTextBtn.border = true; minTextBtn.selectable = false; addChild(minTextBtn); minTextBtn.addEventListener(MouseEvent.CLICK, onMinimize); var maxTextBtn:TextField = new TextField(); maxTextBtn.x = 120; maxTextBtn.y = 10; maxTextBtn.text = "Maximize"; maxTextBtn.background = true; maxTextBtn.border = true; maxTextBtn.selectable = false; addChild(maxTextBtn); maxTextBtn.addEventListener(MouseEvent.CLICK, onMaximize); var restoreTextBtn:TextField = new TextField(); restoreTextBtn.x = 230; restoreTextBtn.y = 10; restoreTextBtn.text = "Restore"; restoreTextBtn.background = true; restoreTextBtn.border = true; restoreTextBtn.selectable = false; addChild(restoreTextBtn); restoreTextBtn.addEventListener(MouseEvent.CLICK, onRestore); var closeTextBtn:TextField = new TextField(); closeTextBtn.x = 340; closeTextBtn.y = 10; closeTextBtn.text = "Close Window";

Page 76: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

69ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

closeTextBtn.background = true; closeTextBtn.border = true; closeTextBtn.selectable = false; addChild(closeTextBtn); closeTextBtn.addEventListener(MouseEvent.CLICK, onCloseWindow); } function onMinimize(event:MouseEvent):void { this.stage.nativeWindow.minimize(); } function onMaximize(event:MouseEvent):void { this.stage.nativeWindow.maximize(); } function onRestore(event:MouseEvent):void { this.stage.nativeWindow.restore(); } function onCloseWindow(event:MouseEvent):void { this.stage.nativeWindow.close(); } } }

Bir pencereyi yeniden boyutlandırma ve taşıma

Bir pencere sistem kromu kullandığında, krom, pencerenin yeniden boyutlandırılması ve masaüstünde taşınması için

sürükleme denetimleri sağlar. Pencere sistem kromu kullanmıyorsa, kullanıcının pencereyi yeniden boyutlandırması

ve taşımasını olanaklı kılmak için kendi denetimlerinizi eklemelisiniz.

Not: Bir pencereyi yeniden boyutlandırmak veya taşımak için, önce NativeWindow örneğine bir başvuru almalısınız.

Bir pencere başvurusunun nasıl alınacağı hakkında bilgi için “Bir NativeWindow örneği alma” sayfa 65.

Bir pencereyi yeniden boyutlandırma

Bir pencereyi yeniden boyutlandırmak için NativeWindow startResize() yöntemini kullanın. Bu yöntem bir

mouseDown olayından çağrıldığında, yeniden boyutlandırma işlemi fareyle başlatışır ve işletim sistemi bir mouseUp

olayı aldığında tamamlanır. startResize() yöntemini çağırırken, pencerenin yeniden boyutlandırılacağı ilk kenar ve

köşeyi belirten bir argüman iletirsiniz.

Sahnenin ölçekleme modu, pencere sahnesi ve içeriklerinin pencere yeniden boyutlandırıldığında nasıl davranacağını

belirler. Sahne ölçekleme modlarının, web tarayıcısında olduğu gibi, uygulamanın görüntü alanının boyutu veya en

boy oranının denetiminde olmadığı durumlar için tasarlanmış olduğunu unutmayın. Genellikle scaleMode özelliğini

StageScaleMode.NO_SCALE olarak ayarladığınızda en iyi sonuçları alırsınız. Yine de, pencere içeriğinin

ölçeklenmesini istiyorsanız, değişen pencere sınırlarına yanıt olarak scaleX ve scaleY parametrelerini

ayarlayabilirsiniz.

Bir pencereyi taşıma

Bir pencereyi yeniden boyutlandırmadan taşımak için NativeWindow startMove() yöntemini kullanın.

startResize() yöntemi gibi, startMove() yöntemi bir mouseDown olayından çağrıldığında, taşıma işlemi fareyle

başlatılmıştır ve işletim sistemi bir mouseUp olayı aldığında tamamlanır.

startResize ve startMove yöntemleri hakkında daha fazla bilgi için bkz. ActionScript 3.0 Dil ve Bileşenler

Başvurusu (http://www.adobe.com/go/learn_air_aslr_tr).

Page 77: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

70ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Örnek: Pencereleri yeniden boyutlandırma ve taşıma

Aşağıdaki örnek bir pencerede yeniden boyutlandırma ve taşıma işlemlerinin nasıl başlatılacağını gösterir:

package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.NativeWindowResize; public class NativeWindowResizeExample extends Sprite { public function NativeWindowResizeExample():void { // Fills a background area. this.graphics.beginFill(0xFFFFFF); this.graphics.drawRect(0, 0, 400, 300); this.graphics.endFill(); // Creates a square area where a mouse down will start the resize. var resizeHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20); resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize); // Creates a square area where a mouse down will start the move. var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0); moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove); } public function createSprite(color:int, size:int, x:int, y:int):Sprite { var s:Sprite = new Sprite(); s.graphics.beginFill(color); s.graphics.drawRect(0, 0, size, size); s.graphics.endFill(); s.x = x; s.y = y; this.addChild(s); return s; } public function onStartResize(event:MouseEvent):void { this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT); } public function onStartMove(event:MouseEvent):void { this.stage.nativeWindow.startMove(); } } }

Page 78: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

71ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Pencere olaylarını dinleme

Bir pencerenin gönderdiği olayları dinlemek için, pencere örneğiyle bir dinleyiciyi kaydedin. Örneğin, closing olayını

dinlemek için, bir dinleyiciyi pencereyle aşağıdaki gibi kaydedin:

myWindow.addEventListener(Event.CLOSING, onClosingEvent);

Bir olay gönderildiğinde target özelliği olayı gönderen pencereye başvurur.

Çoğu pencere olayının iki ilişkili mesajı vardır. İlk mesaj, bir pencere değişikliği yapılacağına (ve bunun iptal

edilebileceğine) işaret ederken, ikinci mesaj değişikliğin gerçekleştiğini bildirir. Örneğin, kullanıcı pencerenin

kapatma düğmesini tıklattığında, closing olayı mesajı gönderilir. Hiçbir dinleyici olayı iptal etmezse, pencere kapatılır

ve close olayı tüm dinleyicilere gönderilir.

Genellikle closing gibi uyarı olayları, yalnızca bir olayı tetiklemek için sistem kromu kullanıldıysa gönderilir.

Örneğin, pencere close() yönteminin çağrılması otomatik olarak closing olayını göndermez—yalnızca close olayı

gönderilir. Ancak, bir closing olayı nesnesi oluşturabilir ve bunu pencerenin dispatchEvent() yöntemini kullanarak

gönderebilirsiniz.

Bir Event nesnesi gönderen pencere olayları:

Bir NativeWindowBoundsEvent nesnesi gönderen pencere olayları:

NativeWindowBoundsEvent olayları için, bekleyen veya tamamlanan bir değişiklikten önce ve sonraki pencere

sınırlarını belirlemek üzere beforeBounds ve afterBounds özelliklerini kullanabilirsiniz.

Bir NativeWindowDisplayStateEvent nesnesi gönderen pencere olayları:

NativeWindowDisplayStateEvent olayları için, bekleyen veya tamamlanan bir değişiklikten önce ve sonraki pencere

görüntü durumunu belirlemek üzere beforeDisplayState ve afterDisplayState özelliklerini kullanabilirsiniz.

Olay Açıklama

activate Pencere odak aldığında gönderilir.

deactivate Pencere odağı kaybettiğinde gönderilir.

closing Pencere kapatılmak üzere olduğunda gönderilir. Bu otomatik olarak yalnızca sistem kromu kapatma düğmesine

basıldığında veya Mac OS X'te Çıkış komutu çağrıldığında gerçekleşir.

close Pencere kapatıldığında gönderilir.

Olay Açıklama

moving Pencerenin sol üst köşesi taşıma, yeniden boyutlandırma veya pencere görüntü durumu değişikliği sonucunda

konumunu değiştirmeden hemen önce gönderilir.

move Sol üst köşe konumunu değiştirdikten sonra gönderilir.

resizing Pencere genişliği veya yüksekliği, yeniden boyutlandırma veya görüntü durumu değişikliği sonucunda

değişmeden hemen önce gönderilir.

resize Pencere boyut değiştirdikten sonra gönderilir.

Olay Açıklama

displayStateChanging Pencere görüntü durumu değişmeden hemen önce gönderilir.

displayStateChange Pencere görüntü durumu değiştikten sonra gönderilir.

Page 79: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

72ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel pencerelerle çalışma

Tam ekran pencereleri görüntüleme

Sahne'nin displayState özelliğini StageDisplayState.FULL_SCREEN_INTERACTIVE olarak ayarlama, pencereyi

tam ekran moduna geçirir ve bu modda klavye girişine izin verilir. (Bir tarayıcıda çalışan SWF içeriğinde, klavye

girişine izin verilmez). Kullanıcı, tam ekran modundan çıkmak için Escape tuşuna basar.

Flash için aşağıdaki ActionScript örneği, basit bir tam ekranlı metin uçbirimi simüle eder:

import flash.display.Sprite; import flash.display.StageDisplayState; import flash.text.TextField; import flash.text.TextFormat; public class FullScreenTerminalExample extends Sprite { public function FullScreenTerminalExample():void { var terminal:TextField = new TextField(); terminal.multiline = true; terminal.wordWrap = true; terminal.selectable = true; terminal.background = true; terminal.backgroundColor = 0x00333333; this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; addChild(terminal); terminal.width = 550; terminal.height = 400; terminal.text = "Welcome to the dumb terminal application. Press the ESC key to exit.\n_"; var tf:TextFormat = new TextFormat(); tf.font = "Courier New"; tf.color = 0x00CCFF00; tf.size = 12; terminal.setTextFormat(tf); terminal.setSelection(terminal.text.length - 1, terminal.text.length); } }

Page 80: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

73

Bölüm 11: Ekranlar

Bilgisayara eklenen masaüstü görüntü ekranları hakkındaki bilgiye erişmek için Adobe® AIR® Screen sınıfını kullanın.

Ekranlar hakkında ek çevrimiçi bilgi

Screen sınıfı ve ekranlarla çalışma hakkında daha fazla bilgiyi şu kaynaklarda bulabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• Sanal masaüstünü ölçme

Dil Başvurusu

• Ekran

Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri

• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR ekranları'nı arama)

Ekran temelleri

Ekran API'si, sistem ekran bilgisinin elde edilmesi için statik üyeler ve belirli bir ekranın açıklanması için örnek üyeler

sağlayan Screen adlı tek bir sınıf içerir.

Bilgisayar sistemi, sanal alana yerleştirilmiş çeşitli masaüstü ekranlarına karşılık gelen, kendisine eklenmiş birkaç

monitör ve görüntü içerebilir. AIR Screen sınıfı ekranlar, ekranların göreceli olarak yerleştirilmesi ve kullanılabilir

alanları hakkında bilgi sağlar. Aynı ekrana birden çok monitör eşleniyorsa, yalnızca bir ekran mevcut olur. Ekran

boyutu monitörün görüntü alanından büyükse, ekranın hangi bölümünün geçerli olarak görünür olduğunu

belirlemenin bir yolu yoktur.

Ekran, bağımsız bir masaüstü görüntü alanını temsil eder. Ekranlar, görsel masaüstü içinde dikdörtgenler olarak

tanımlanır. Birincil görüntü olarak belirlenen ekranın sol üst köşesi, görsel masaüstü koordinat sisteminin başlangıç

noktasıdır. Ekranı tanımlamak için kullanılan tüm deperler piksel cinsinden verilir.

Page 81: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

74ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Ekranlar

Bu ekran yerleştirmesinde, görsel masaüstünde iki ekran bulunuyor. Ana ekranın (#1) sol üst köşesinin koordinatları her zaman (0,0)'dır. Ekran yerleştirmesi ekran #2'yi ana ekran olarak belirleyecek biçimde değiştirilirse, ekran #1'in koordinatları negatif olur. Ekrana ilişkin kullanılabilir sınırlar bildirilirken menü çubukları, görev çubukları ve dock'lar hariç tutulur.

Ekran API sınıfı, yöntemleri, özellikleri ve olayları hakkında ayrıntılı bilgi için bkz. ActionScript 3.0 Dil ve Bileşen

Başvurusu (http://www.adobe.com/go/learn_air_aslr_tr).

Ekranları numaralandırma

Sanal masaüstü ekranlarını aşağıdaki ekran yöntemleri ve özellikleriyle numaralandırabilirsiniz:

Screen class yöntemleri ve özelliklerinden dönen değerleri kaydetmemelisiniz. Kullanıcı veya işletim sistemi var olan

ekranları ve bu ekranların yerleştirilmesini her zaman değiştirebilir.

Aşağıdaki örnek, ok tuşlarına basılmasına yanıt olarak bir pencereyi birden çok ekran arasında taşımak için ekran

API'sini kullanır. Pencereyi sonraki ekrana taşımak için örnek ekranlar dizisini getirir ve bu diziyi dikey veya yatay

olarak sıralar (basılan ok tuşuna göre). Daha sonra kod sıralanan dizide her ekranı geçerli ekranın koordinatlarıyla

karşılaştırarak ilerler. Örnek, pencerenin geçerli ekranını tanımlamak için pencere sınırlarında iletilen

Screen.getScreensForRectangle() yöntemini çağırır.

Yöntem veya Özellik Açıklama

Screen.screens Kullanılabilir ekranları açıklayan bir dizi Screen nesnesi sağlar. Dizinin sırasının önemli olmadığını göz

önünde bulundurun.

Screen.mainScreen Ana ekran için bir Screen nesnesi sağlar Mac OS X'te ana ekran her zaman menü çubuğunu görüntüleyen

ekrandır. Windows'ta ana ekran, sistem tarafından belirlenen birincil ekrandır.

Screen.getScreensForRectangle() Belirtilen dikdörtgenle kesişen ekranları tanımlayan bir dizi Screen nesnesi sağlar. Bu yönteme aktarılan

dikdörtgen, sanal masaüstündeki piksel koordinatlarındadır. Hiçbir ekran dikdörtgenle kesişmiyorsa,

dizi boştur. Bu yöntemi, bir pencerenin hangi ekranlarda görüntülendiğini bulmak için kullanabilirsiniz.

Screen boundsVirtual screenUsable bounds

Page 82: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

75ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Ekranlar

package { import flash.display.Sprite; import flash.display.Screen; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.display.StageAlign; import flash.display.StageScaleMode; public class ScreenExample extends Sprite { public function ScreenExample() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey); } private function onKey(event:KeyboardEvent):void{ if(Screen.screens.length > 1){ switch(event.keyCode){ case Keyboard.LEFT : moveLeft(); break; case Keyboard.RIGHT : moveRight(); break; case Keyboard.UP : moveUp(); break; case Keyboard.DOWN : moveDown(); break; } } } private function moveLeft():void{ var currentScreen = getCurrentScreen(); var left:Array = Screen.screens; left.sort(sortHorizontal); for(var i:int = 0; i < left.length - 1; i++){ if(left[i].bounds.left < stage.nativeWindow.bounds.left){ stage.nativeWindow.x += left[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; } } } private function moveRight():void{ var currentScreen:Screen = getCurrentScreen(); var left:Array = Screen.screens; left.sort(sortHorizontal); for(var i:int = left.length - 1; i > 0; i--){ if(left[i].bounds.left > stage.nativeWindow.bounds.left){ stage.nativeWindow.x +=

Page 83: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

76ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Ekranlar

left[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; } } } private function moveUp():void{ var currentScreen:Screen = getCurrentScreen(); var top:Array = Screen.screens; top.sort(sortVertical); for(var i:int = 0; i < top.length - 1; i++){ if(top[i].bounds.top < stage.nativeWindow.bounds.top){ stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; break; } } } private function moveDown():void{ var currentScreen:Screen = getCurrentScreen(); var top:Array = Screen.screens; top.sort(sortVertical); for(var i:int = top.length - 1; i > 0; i--){ if(top[i].bounds.top > stage.nativeWindow.bounds.top){ stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; break; } } } private function sortHorizontal(a:Screen,b:Screen):int{ if (a.bounds.left > b.bounds.left){ return 1; } else if (a.bounds.left < b.bounds.left){ return -1; } else {return 0;} } private function sortVertical(a:Screen,b:Screen):int{ if (a.bounds.top > b.bounds.top){ return 1; } else if (a.bounds.top < b.bounds.top){ return -1; } else {return 0;} } private function getCurrentScreen():Screen{ var current:Screen; var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds); (screens.length > 0) ? current = screens[0] : current = Screen.mainScreen; return current; } } }

Page 84: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

77

Bölüm 12: Yerel menülerle çalışma

Uygulama, pencere, bağlam menülerini ve açılır menüleri tanımlamak için yerel menü API'lerindeki sınıfları kullanın.

Yerel menüler hakkında ek çevrimiçi bilgiler

Yerel menü API'si ve yerel menülerle çalışma hakkında daha fazla bilgiyi aşağıdaki kaynaklarda bulabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• AIR uygulamasına yerel menüler ekleme

Dil Başvurusu

• NativeMenu

• NativeMenuItem

Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri

• Flash için Adobe Geliştirici Bağlantısı ('AIR menüleri'ni arama)

AIR menüsü temelleri

Yerel menü sınıfları, uygulamanızın çalıştığı işletim sisteminin yerel menü özelliklerine erişmenizi sağlar. NativeMenu

nesneleri uygulama menüleri (Mac OS X'te bulunan), pencere menüleri (Windows'ta bulunan), bağlam menüleri ve

açılır menüler için kullanılabilir.

AIR menüsü sınıfları

Adobe® AIR™ Menu sınıfları şunları içerir:

Paket Sınıflar

flash.display • NativeMenu

• NativeMenuItem

flash.ui • ContextMenu

• ContextMenuItem

flash.events • Olay

• ContextMenuEvent

Page 85: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

78ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Menü çeşitleri

AIR, aşağıdaki menü türlerini destekler:

Uygulama menüleri Uygulama menüsü, tüm uygulamada geçerli olan genel bir menüdür. Uygulama menüleri Mac

OS X'te desteklenir, ancak Windows'ta desteklenmez. Mac OS X'te, işletim sistemi otmatik olarak bir uygulama

menüsü oluşturur. Standart menülere öğeler ve alt menüler eklemek için AIR menü API'lerini kullanabilirsiniz. Var

olan menü komutlarını yönetmek için dinleyiciler ekleyebilirsiniz. Veya var olan öğeleri kaldırabilirsiniz.

Pencere menüleri Pencere menüsü tek bir pencereyle ilişkilendirilmiştir ve başlık menüsünün altında görüntülenir.

Menüler, bir NativeMenu nesnesi oluşturma ve bu nesneyi NativeWindow nesnesinin menu özelliğine atama yoluyla

bir pencereye eklenebilir. Pencere menüleri Windows işletim sisteminde desteklenir, ancak Mac OS X'te desteklenmez.

Yerel menüler yalnızca sistem kenarlığına sahip pencerelerle kullanılabilir.

Bağlam menüleri Bağlam menüleri, SWF içeriğindeki etkileşimli bir nesnenin veya HTML içeriğindeki bir belge

öğesinin sağ tıklatılması veya command tuşuna basılı tutularak tıklatılması yoluyla açılır. AIR NativeMenu sınıfını

kullanarak bağlam menüsü oluşturabilirsiniz. (Eski Adobe® Flash® ContextMenu sınıfını da kullanabilirsiniz.) HTML

içeriğinde, HTML öğesine bağlam menüleri eklemek için Webkit HTML ve JavaScript API'lerini kullanabilirsiniz.

Dock ve sistem tepsisi simge menüleri Bu simge menüleri bağlam menülerine benzer ve Mac OS X dock'unda veya

Windows bildirim alanındaki bir uygulama simgesine atanmıştır. Dock ve sistem tepsisi simge menüleri, NativeMenu

sınıfını kullanır. Mac OS X'te, menüdeki öğeler standart işletim sistemi öğelerinin üzerine eklenmiştir. Windows'ta

standart menü yoktur.

Açılır menüler AIR açılır menüsü, bağlam menüsüne benzer, ancak belirli bir uygulama nesnesi veya bileşeni ile

ilişkilendirilmiş olmayabilir. Açılır menüler, herhangi bir NativeMenu nesnesinin display() yönteminin çağrılması

yoluyla pencerenin herhangi bir yerinde görüntülenebilir.

Özel menüler Yerel menüler tamamen işletim sistemiyle çizilir ve bu nedenle Flash ve HTML oluşturma modellerinin

dışında yer alır. MXML, ActionScript veya JavaScript kullanarak kendinize ait yerel olmayan menüler

oluşturabilirsiniz. AIR menü sınıfları, yerel menülerin çizimini denetleme olanağı sunmaz.

Varsayılan menüler

Aşağıdaki varsayılan menüler işletim sistemi veya yerleşik bir AIR sınıfı tarafından sağlanır:

• Mac OS X'teki uygulama menüsü

• Mac OS X'teki dock simgesi menüsü

• HTML içeriğinde seçilen metin ve görüntüler için bağlam menüsü

• TextField nesnesinde (veya TextField'ı genişleten bir nesnede) seçilen metin için bağlam menüsü

Menü yapısı

Menüler yapıları gereği hiyerarşiktir. NativeMenu nesneleri, alt NativeMenuItem nesneleri içerebilir. Alt menüleri

temsil eden NativeMenuItem nesneleri, buna karşılık NativeMenu nesnelerini içerebilir. Yapıdaki üst veya kök düzey

menü nesneleri, uygulama ve pencere menülerine ilişkin menü çubuğunu temsil eder. (Bağlam menüleri, simge

menüleri ve açılır menüler menü çubuğu içermez).

Page 86: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

79ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Aşağıdaki diyagram, tipik bir menünün yapısını gösterir. Kök menü, menü çubuğunu temsil eder ve Dosya alt menüsü

ile Düzen alt menüsüne başvuruda bulunan iki menü öğesi içerir. Bu yapıdaki Dosya alt menüsü iki komut öğesinin

yanı sıra Son Kullanılan Menüyü Aç alt menüsüne başvuruda bulunan ve kendisi üç öğe içeren bir öğeyi içerir. Düzen

alt menüsü üç komut ve bir ayırıcı içerir.

Alt menünün tanımlanması, hem NativeMenu hem de NativeMenuItem nesnesini gerektirir. NativeMenuItem

nesnesi, üst menüde görüntülenen etiketi tanımlar ve kullanıcının alt menüyü açmasını sağlar. NativeMenu nesnesi,

alt menüdeki öğeler için konteyner işlevi görür. The NativeMenuItem nesnesi, NativeMenuItem submenu özelliği

aracılığıyla NativeMenu nesnesine başvuruda bulunur.

Bu menüyü oluşturan bir kod örneğini görüntülemek için bkz. “Örnek: Pencere ve uygulama menüsü” sayfa 89.

Menü olayları

NativeMenu ve NativeMenuItem nesnelerinin her ikisi de displaying ve select olaylarını gönderir:

Görüntüleme: Menü görüntülenmeden hemen önce, menü ve menü öğeleri tüm kayıtlı dinleyicilere bir displaying

olayı gönderir. displaying olayı, size menü içeriklerini veya öğe görünümünü kullanıcıya gösterilmeden önce

güncelleme fırsatı verir. Örneğin, “Son Kullanılanları Aç” menüsünün displaying olayına ilişkin dinleyicide, menü

öğelerini son görüntülenen belgelerin güncel listesini yansıtacak biçimde değiştirebilirsiniz.

Event nesnesinin target özelliği her zaman görüntülenmek üzere olan menüdür. currentTarget, dinleyicinin

üzerinde kayıtlı olduğu nesnedir: menünün kendisi veya öğelerinden biridir.

Not: Displaying olayı, menünün veya menü öğelerinden birinin durumuna erişildiğinde de gönderilir.

NativeMenu Root Menu

NativeMenuItem “File”

NativeMenu File Menu

NativeMenuItem “New”

NativeMenuItem “Save”

NativeMenuItem “Open Recent”

NativeMenu Open Recent Menu

NativeMenuItem “GreatGatsby.pdf”

NativeMenuItem “WarAndPeace.pdf”

NativeMenuItem “Iliad.pdf”

NativeMenuItem “Edit”

NativeMenu Edit Menu

NativeMenuItem “Copy”

NativeMenuItem “Paste”

NativeMenuItem Separator

NativeMenuItem “Preferences”

Page 87: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

80ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Seç: Kullanıcı bir komut öğesini seçtiğinde öğe kayıtlı dinleyicilere bir select olayı gönderir. Alt menü ve ayırıcı

öğeleri seçilemez ve bu nedenle hiçbir zaman select olayı gönderemez.

select olayı, bir menü öğesinden bu öğeyi içeren menüye doğru ve kök menüye kadar baloncuk oluşturur. Select

olaylarını doğrudan bir öğe üzerinde veya daha yüksek sesle menü yapısında dinleyebilirsiniz. Menüde select olayını

dinlediğinizde, olayın target özelliğini kullanarak seçilen öğeyi tanımlayabilirsiniz. Olay menü hiyerarşisi boyunca

kabarcık oluştururken olay nesnesinin currentTarget özelliği geçerli menü nesnesini tanımlar.

Not: ContextMenu ve ContextMenuItem nesneleri menuItemSelect ve menuSelect olaylarının yanı sıra select ve

displaying olaylarını da gönderir.

Menü komutları için tuş eşdeğerleri

Menü komutuna bir tuş eşdeğeri (bazen hızlandırıcı olarak adlandırılır) atayabilirsiniz. Tuşa veya tuş bileşimine

basıldığında, menü öğesi kayıtlı dinleyicilere bir select olayı gönderir. Komutun çağrılması için, öğeyi içeren menü

uygulama menüsünün veya etkin pencerenin bölümü olmalıdır.

Tuş eşdeğerleri, ana anahtarı temsil eden bir dize ve ayrıca basılması gereken bir dizi değiştirici tuş olmak üzere iki

bölümden oluşur. Ana anahtarı atamak için, menü öğesi keyEquivalent özelliğini bu tuş için tek karakter dizesi

olarak ayarlayın. Büyük harf kullandığınızda, shift tuşu değiştirici dizisine otomatik olarak eklenir.

Mac OS X'te, varsayılan değiştirici (Keyboard.COMMAND) komut tuşudur. Windows'ta, (Keyboard.CONTROL) ctrl

tuşudur. Bu varsayılan tuşlar değiştirici dizisine otomatik olarak eklenir. Farklı değiştirici tuşlar atamak için

keyEquivalentModifiers özelliğine istenen tuş kodlarını içeren yeni bir dizi atayın. Varsayılan dizinin üzerine

üzerine yazılır. Varsayılan değiştiricileri kullansanız da kendi değiştirici dizinizi atasanız da, keyEquivalent

özelliğine atadığınız dize büyük harf olduğunda shift tuşu eklenir. Değiştirici tuşlar için kullanılacak tuş kodlarına

ilişkin sabitler Keyboard sınıfında tanımlanır.

Atanan tuş eşdeğer dizesi, otomatik olarak menü öğesi adının yanında görüntülenir. Format kullanıcının işletim

sistemine ve sistem tercihlerine bağlıdır.

Not: Windows işletim sisteminde bir tuş değiştirici dizisine Keyboard.COMMAND değerini atadığınızda, menüde tuş

eşdeğeri görüntülenmez. Ancak, menü komutunu etkinleştirmek için ctrl tuşu kullanılmalıdır.

Aşağıdaki örnek, menü öğesine ilişkin tuş eşdeğeri olarak Ctrl+Shift+G tuşlarını atamaktadır:

var item:NativeMenuItem = new NativeMenuItem("Ungroup"); item.keyEquivalent = "G";

Bu örnek, doğrudan değiştirici dizisini ayarlayarak tuş eşdeğeri olarak Ctrl+Shift+G tuşlarını atar:

var item:NativeMenuItem = new NativeMenuItem("Ungroup"); item.keyEquivalent = "G"; item.keyEquivalentModifiers = [Keyboard.CONTROL];

Not: Tuş eşdeğerleri yalnızca uygulama ve pencere menüleri için tetiklenir. Bağlam menüsüne veya açılır menüye bir tuş

eşdeğeri atadığınızda, tuş eşdeğeri menü etiketinde görüntülenir, ancak ilişkili menü komutu hiçbir zaman çağrılmaz.

Anımsatıcılar

Anımsatıcılar, menülere ilişkin işletim sistemi klavye arabiriminin bir parçasıdır. Hem Mac OS X hem de Windows,

kullanıcıların klavye yoluyla menüleri açmasına ve komutları seçmesine olanak tanır, ancak ikisi arasında küçük

farklar vardır. Mac OS X'te kullanıcı menünün ilk veya iki harfini yazar ve ardından return tuşuna basar.

Page 88: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

81ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Windows'ta yalnızca tek bir harf önemlidir. Varsayılan olarak, önemli harf etiketteki ilk karakterdir. Ancak menü

öğesine bir anımsatıcı atadığınızda, önemli karakter belirlenen harf olarak değişir. Bir menüdeki iki öğe aynı önemli

karaktere sahip olduğunda (anımsatıcı atanmış olup olmaması önemli değildir) kullanıcının menü ile klavye etkileşimi

biraz değişir. Kullanıcı, menüyü veya komutu seçmek üzere tek bir harfe basmak yerine, harfe istenen öğeyi

vurgulamak için gerekli olduğu kadar basmalı ve daha sonra seçimi tamamlamak için Enter tuşunu kullanmalıdır.

Tutarlı davranışı korumak için, pencere menülerine ilişkin bir menüdeki her kaleme benzersiz bir anımsatıcı atamanız

tavsiye edilir.

Anımsatıcı karakteri etiket dizesinde dizin olarak belirleyin. Etiketteki ilk karakterin dizini 0'dır. Bu nedenle,

etiketlenen menü öğesi “Format” için “r” anımsatıcısını kullanmak üzere mnemonicIndex özelliğini 2'ye

eşitlemelisiniz.

var item:NativeMenuItem = new NativeMenuItem("Format"); item.mnemonicIndex = 2;

Menü öğesi durumu

Menü öğeleri iki durum özelliğine sahiptir, checked ve enabled:

checked Öğe etiketinin yanında bir onay işareti görüntülemek için true özelliğini belirleyin.

var item:NativeMenuItem = new NativeMenuItem("Format"); item.checked = true;

enabled Komutun etkin olup olmadığını kontrol etmek için değeri true ve false arasında değiştirin. Etkin olmayan

öğeler silik bir görselliğe sahiptir ve select olayları göndermez.

var item:NativeMenuItem = new NativeMenuItem("Format"); item.enabled = false;

Menü öğesine nesne ekleme

NativeMenuItem sınıfının data özelliği, her öğede rasgele bir nesneye başvuruda bulunabilmenizi sağlar. Örneğin,

“Son Kullanılanları Aç” menüsünde her bir menü öğesine her belge için File nesnesi atayabilirsiniz.

var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf") var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name)); menuItem.data = file;

Yerel menüler oluşturma

Bu başlık, AIR tarafından desteklenen çeşitli türlerdeki yerel menülerin nasıl oluşturulduğunu açıklar.

Root menu nesnesi oluşturma

Menü kökü olarak görev yapacak bir NativeMenu nesnesi oluşturmak için NativeMenu yapıcısını kullanın:

var root:NativeMenu = new NativeMenu();

Kök menü, uygulama ve pencere menüleri için menü çubuğunu temsil eder ve yalnızca alt menüleri açan öğeleri

içermelidir. Bağlam menüsü ve açılır menüler menü çubuğu içermez. Bu nedenle kök menü, alt menülerin yanı sıra

komutlar ve ayırıcı da içermelidir.

Menü oluşturulduktan sonra, menü öğelerini ekleyebilirsiniz. Öğeleri belirli bir dizine menu nesnesinin addItemAt()

yöntemini kullanarak eklemediğiniz sürece, öğeler menüye eklendikleri sıraya göre görüntülenir.

Page 89: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

82ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Menüyü uygulama, pencere, simge veya bağlam menüsü olarak atayın veya aşağıdaki bölümlerde gösterildiği gibi açılır

menü olarak görüntüleyin:

Uygulama menüsünü ayarlama

NativeApplication.nativeApplication.menu = root;

Not: Mac OS X, her uygulama için standart öğeler içeren bir menü tanımlar. NativeApplication nesnesinin menu

özelliğine yeni bir NativeMenu nesnesinin atanması, standart menüyü değiştirir. Değiştirmek yerine, standart menüyü

de kullanabilirsiniz.

Pencere menüsünü ayarlama

nativeWindowObject.menu = root;

Etkileşimli bir nesnede bağlam menüsünü ayarlama

interactiveObject.contextMenu = root;

Dock simgesi menüsünü ayarlama

DockIcon(NativeApplication.nativeApplication.icon).menu = root;

Not: Mac OS X, uygulama dock simgesi için standart bir menü tanımlar. DockIcon nesnesinin menu özelliğine yeni bir

NativeMenu atadığınızda, bu menüdeki öğeler standart öğelerin üzerinde görüntülenir. Standart menü öğelerini

kaldıramaz, değiştiremez veya bu öğelere erişemezsiniz.

Sistem tepsisi simge menüsünü ayarlama

SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = root;

Menüyü açılır menü olarak görüntüleme

root.display(stage, x, y);

Alt menü oluşturma

Alt menü oluşturmak için, üst menüye bir NativeMenuItem nesnesi ekleyin ve daha sonra öğenin submenu özelliğine

alt menüyü tanımlayan NativeMenu nesnesini atayın. AIR, alt menü öğeleri ve bu öğelere ilişkin menü nesneleri

oluşturmak için iki yol sunar:

addSubmenu() yöntemiyle bir menü öğesi ve buna ilişkin menü nesnesini tek bir adımda oluşturabilirsiniz:

var editMenuItem:NativeMenuItem = root.addSubmenu(new NativeMenu(), "Edit");

Menü öğesini oluşturabilir ve menü nesnesini submenu özelliğine ayrıca da atayabilirsiniz:

var editMenuItem:NativeMenuItem = root.addItem("Edit", false); editMenuItem.submenu = new NativeMenu();

Menü komutu oluşturma

Menü komutu oluşturmak için menüye bir NativeMenuItem nesnesi ve menü komutunu uygulayan işleve başvuran

bir olay dinleyicisi ekleyin:

var copy:NativeMenuItem = new NativeMenuItem("Copy", false); copy.addEventListener(Event.SELECT, onCopyCommand); editMenu.addItem(copy);

Page 90: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

83ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Select olayını komut öğesinin üzerinde dinleyebilir (örnekte gösterildiği gibi) veya select olayını üst menü

nesnesinde dinleyebilirsiniz.

Not: Alt menüleri ve ayırıcı satırları temsil eden menü öğeleri, select olayları göndermez ve bu nedenle komut olarak

kullanılamaz.

Menü ayırıcı satırı oluşturma

Ayırıcı satır oluşturmak için, yapıcıdaki isSeparator parametresini true olarak ayarlayarak bir NativeMenuItem

oluşturun. Daha sonra ayırıcı öğeyi doğru yerdeki menüye ekleyin:

var separatorA:NativeMenuItem = new NativeMenuItem("A", true); editMenu.addItem(separatorA);

Ayırıcı için belirtilen bir etiket varsa, görüntülenmez.

Bağlam menüleri hakkında

SWF içeriğinde, InteractiveObject nesnesinden miras alınan her nesnenin contextMenu özelliğine bir menü nesnesi

atanarak, bu nesneye bir bağlam menüsü verilebilir. contextMenu öğesine atanan menü nesnesi NativeMenu veya

type ContextMenu tipinde olabilir.

Eski bağlam menüsü API sınıfları, daha önceden bağlam menüleri içeren ActionScript kodunu kullanmanızı sağlar.

ContextMenu sınıfını kullanıyorsanız, bununla birlikte ContextMenuItem sınıfını da kullanmalısınız; bir

ContextMenu nesnesine NativeMenuItem nesneleri ve bir NativeMenu nesnesine ContextMenuItem nesneleri

ekleyemezsiniz. Bağlam menüsü API'si kullanmanın en önemli dezavantajı, bu API'nin alt menüleri

desteklememesidir.

ContextMenu sınıfı, addItem() gibi NativeMenu sınıfından miras alınan yöntemleri içerse de, bu yöntemler yanlış

öğe dizisine öğeler ekler. Bağlam menüsünde tüm öğeler items dizisine değil, customItems dizisine eklenmelidir.

Menüdeki öğeleri eklemek ve yönetmek için bağlam menülerine ilişkin NativeMenu nesnelerini veya yalnızca miras

alınmayan ContextMenu yöntemleri ve özelliklerini kullanın.

Aşağıdaki örnek bir hareketli görüntü oluşturur ve basit bir düzenleme bağlam menüsü ekler:

Page 91: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

84ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

var sprite:Sprite = new Sprite(); sprite.contextMenu = createContextMenu() private function createContextMenu():ContextMenu{ var editContextMenu:ContextMenu = new ContextMenu(); var cutItem:ContextMenuItem = new ContextMenuItem("Cut") cutItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCutCommand); editContextMenu.customItems.push(cutItem); var copyItem:ContextMenuItem = new ContextMenuItem("Copy") copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCopyCommand); editContextMenu.customItems.push(copyItem); var pasteItem:ContextMenuItem = new ContextMenuItem("Paste") pasteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doPasteCommand); editContextMenu.customItems.push(pasteItem); return editContextMenu } private function doCutCommand(event:ContextMenuEvent):void{trace("cut");} private function doCopyCommand(event:ContextMenuEvent):void{trace("copy");} private function doPasteCommand(event:ContextMenuEvent):void{trace("paste");}

Not: Tarayıcı ortamında görüntülenen SWF içeriğinin aksine, AIR'deki bağlam menüleri yerleşik komutlar içermez.

HTML'deki bağlam menüleri hakkında

HTML içeriğinde, contextmenu olayı bir bağlam menüsünü görüntülemek için kullanılabilir. Varsayılan olarak

bağlam menüsü, kullanıcı seçilen metinde bağlam menüsü olayını çağırdığında görüntülenir (metni sağ tıklatma veya

command tuşuna basılı tutarak tıklatma yoluyla). Varsayılam menünün açılmasını önlemek için, contextmenu olayını

dinleyin ve event nesnesinin preventDefault() yöntemini çağırın:

function showContextMenu(event){ event.preventDefault(); }

Özel bağlam menüsünü DHTML tekniklerini kullanarak veya bir AIR yerel bağlam menüsünü görüntüleyerek

görüntüleyebilirsiniz. Aşağıdaki örnek, HTML contextmenu olayına yanıt olarak menü display() yöntemini

çağırma yoluyla yerel bir bağlam menüsünü görüntüler:

Page 92: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

85ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

<html> <head> <script src="AIRAliases.js" language="JavaScript" type="text/javascript"></script> <script language="javascript" type="text/javascript"> function showContextMenu(event){ event.preventDefault(); contextMenu.display(window.nativeWindow.stage, event.clientX, event.clientY); } function createContextMenu(){ var menu = new air.NativeMenu(); var command = menu.addItem(new air.NativeMenuItem("Custom command")); command.addEventListener(air.Event.SELECT, onCommand); return menu; } function onCommand(){ air.trace("Context command invoked."); } var contextMenu = createContextMenu(); </script> </head> <body> <p oncontextmenu="showContextMenu(event)" style="-khtml-user-select:auto;">Custom context menu.</p> </body> </html>

Yerel menüleri tanıtıcı biçimde tanımlama

Menü ve menü öğeleri özelliklerinin kodlanması biraz zahmetli olabilir. Ancak, menüler hiyerarşik bir yapıda

olduklarından, doğru olan XML formatlı bir tanım kullanarak menü oluşturan bir işlev yazmaktır.

Aşağıdaki sınıf, yapıcısına bir XML nesnesi alarak NativeMenu öğesini şunu yapmak için geliştirir:

Page 93: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

86ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

package { import flash.display.NativeMenu; import flash.display.NativeMenuItem; import flash.events.Event; public class DeclarativeMenu extends NativeMenu { public function DeclarativeMenu(XMLMenuDefinition:XML):void { super(); addChildrenToMenu(this, XMLMenuDefinition.children()); } private function addChildrenToMenu(menu:NativeMenu, children:XMLList):NativeMenuItem { var menuItem:NativeMenuItem; var submenu:NativeMenu; for each (var child:XML in children) { if (String(child.@label).length > 0) { menuItem = new NativeMenuItem(child.@label); menuItem.name = child.name(); } else { menuItem = new NativeMenuItem(child.name()); menuItem.name = child.name(); } menu.addItem(menuItem); if (child.children().length() > 0) { menuItem.submenu = new NativeMenu(); addChildrenToMenu(menuItem.submenu,child.children()); } } return menuItem; } } //End class } //End package

Bu sınıfa sahip bir menü oluşturmak, XML menü tanımını aşağıdaki şekilde onaylayın:

Page 94: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

87ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

var menuDefinition:XML = <root> <FileMenu label='File'> <NewMenu label='New'> <NewTextFile label='Text file'/> <NewFolder label='Folder'/> <NewProject label='Project'/> </NewMenu> <OpenCommand label='Open'/> <SaveCommand label='Save'/> </FileMenu> <EditMenu label='Edit'> <CutCommand label='Cut'/> <CopyCommand label='Copy'/> <PasteCommand label='Paste'/> </EditMenu> <FoodItems label='Food Items'> <Jellyfish/> <Tripe/> <Gizzard/> </FoodItems> </root>; var test:DeclarativeMenu = new DeclarativeMenu(menuDefinition);

Menü olaylarını dinlemek için kök menü düzeyinde dinleyebilir ve hangi komutun seçildiğini saptamak için

event.target.name özelliğini kullanabilirsiniz. Ayrıca menüdeki öğeleri ada göre arayabilir ve ayrı ayrı olay

dinleyicileri oluşturabilirsiniz.

Açılır menüleri görüntüleme

Menü display() yöntemini çağırarak herhangi bir NativeMenu nesnesini bir pencerenin üzerinde rasgele bir

zamanda ve yerde görüntüleyebilirsiniz. Yöntem, sahneye başvuru gerektirir; bu nedenle yalnızca uygulama sanal

alanındaki içerik menüyü açılır biçimde görüntüleyebilir.

Aşağıdaki yöntem, fare tıklatmasına karşılık olarak popupMenu adlı bir NativeMenu nesnesi tarafından tanımlanan

menüyü görüntüler:

private function onMouseClick(event:MouseEvent):void { popupMenu.display(event.target.stage, event.stageX, event.stageY); }

Not: Menünün doğrudan bir olaya karşılık olarak görüntülenmesi gerekmez. Herhangi bir yöntem display() işlevini

çağırabilir.

Menü olaylarını işleme

Kullanıcı menüyü veya bir menü öğesini seçtiğinde, menü olayları gönderir.

Menu sınıfları için olay özeti

Menü olaylarını işlemek için menülere veya ayrı ayrı öğelere olay dinleyicileri ekleyin.

Page 95: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

88ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Menü olaylarını seç

Bir menü öğesini tıklatmayı işlemek için, NativeMenuItem nesnesine select olayına ilişkin bir olay dinleyicisi

ekleyin:

var menuCommandX:NativeMenuItem = new NativeMenuItem("Command X"); menuCommand.addEventListener(Event.SELECT, doCommandX)

Select olayı mevcut menülere baloncuk oluşturduğundan, bir üst menüdeki select olaylarını da dinleyebilirsiniz

Menü düzeyinde dinleme sırasında, hangi menü komutunun seçildiğini belirlemek için olay nesnesinin target

özelliğini kullanabilirsiniz. Aşağıdaki örnek, seçilen komutun etiketini gösterir:

var colorMenuItem:NativeMenuItem = new NativeMenuItem("Choose a color"); var colorMenu:NativeMenu = new NativeMenu(); colorMenuItem.submenu = colorMenu; var red:NativeMenuItem = new NativeMenuItem("Red"); var green:NativeMenuItem = new NativeMenuItem("Green"); var blue:NativeMenuItem = new NativeMenuItem("Blue"); colorMenu.addItem(red); colorMenu.addItem(green); colorMenu.addItem(blue); if(NativeApplication.supportsMenu){ NativeApplication.nativeApplication.menu.addItem(colorMenuItem); NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT, colorChoice); } else if (NativeWindow.supportsMenu){ var windowMenu:NativeMenu = new NativeMenu(); this.stage.nativeWindow.menu = windowMenu; windowMenu.addItem(colorMenuItem); windowMenu.addEventListener(Event.SELECT, colorChoice); } function colorChoice(event:Event):void { var menuItem:NativeMenuItem = event.target as NativeMenuItem; trace(menuItem.label + " has been selected"); }

ContextMenuItem sınıfını kullanıyorsanız, select olayını veya menuItemSelect olayını dinleyebilirsiniz.

menuItemSelect olayı size bağlam menüsünü içeren nesne hakkında ek bilgi verir, ancak mevcut menülere kabarcık

oluşturmaz.

Nesne Gönderilen olaylar

NativeMenu NativeMenuEvent.DISPLAYING

NativeMenuEvent.SELECT (alt öğelerden ve alt menülerden yayılan)

NativeMenuItem NativeMenuEvent.SELECT

NativeMenuEvent.DISPLAYING (üst menüden yayılan)

ContextMenu ContextMenuEvent.MENU_SELECT

ContextMenuItem ContextMenuEvent.MENU_ITEM_SELECT

NativeMenu.SELECT

Page 96: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

89ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

Menü olaylarını görüntüleme

Menü açılışını işlemek için, menü görüntülenmeden önce gönderilen displaying olayı için dinleyici ekleyebilirsiniz.

Menüyü güncellemek için, örneğin öğeler ekleyerek veya kaldırarak ya da ayrı ayrı öğelerin etkin veya işaretli

durumlarını güncelleyerek görüntüleme olayını kullanabilirsiniz.

Örnek: Pencere ve uygulama menüsü

Aşağıdaki örnek, “Menü yapısı” sayfa 78'nda gösterilen menüyü oluşturur.

Menü, hem yalnızca pencere menülerini destekleyen Windows'ta, hem de yalnızca uygulama menülerini destekleyen

Mac OS X'te çalışmak üzere tasarlanmıştır. MenuExample sınıfı yapıcısı, ayrım yapmak için NativeWindow ve

NativeApplication sınıflarının statik supportsMenu özelliğini kontrol eder. Yapıcı, NativeWindow.supportsMenu

öğesi true olduğunda pencere için bir NativeMenu nesnesi oluşturur, daha sonra Dosya ile Düzen alt menülerini

oluşturur ve ekler. NativeApplication.supportsMenu öğesi true, yapıcı Dosya ve Düzen menülerini oluştururarak

bunları Mac OS X işletim sisteminin sağladığı var olan menüye ekler.

Örnek ayrıca, menü olay işlemesini de gösterir. Select olayı öğe düzeyinin yanı sıra menü düzeyinde de işlenir.

Seçilen öğeyi içeren menüden kök menüye kadarki zincirde bulunan her bir menü select olayını yanıtlar.

displaying olayı “Son Kullanılanları Aç” menüsüyle birlikte kullanılır. Menü açılmadan hemen önce, menüdeki

öğeler en son kullanılan Belgeler dizisinden (bu örnekte aslında değişmeyen) yenilenir. Bu örnekte gösterilmese de,

displaying olaylarını ayrı ayrı öğelerde de dinleyebilirsiniz.

package { import flash.display.NativeMenu; import flash.display.NativeMenuItem; import flash.display.NativeWindow; import flash.display.Sprite; import flash.events.Event; import flash.filesystem.File; import flash.desktop.NativeApplication; public class MenuExample extends Sprite { private var recentDocuments:Array = new Array(new File("app-storage:/GreatGatsby.pdf"), new File("app-storage:/WarAndPeace.pdf"), new File("app-storage:/Iliad.pdf")); public function MenuExample() { var fileMenu:NativeMenuItem; var editMenu:NativeMenuItem; if (NativeWindow.supportsMenu){ stage.nativeWindow.menu = new NativeMenu(); stage.nativeWindow.menu.addEventListener(Event.SELECT, selectCommandMenu); fileMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("File")); fileMenu.submenu = createFileMenu(); editMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("Edit")); editMenu.submenu = createEditMenu(); } if (NativeApplication.supportsMenu){

Page 97: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

90ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT, selectCommandMenu); fileMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("File")); fileMenu.submenu = createFileMenu(); editMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("Edit")); editMenu.submenu = createEditMenu(); } } public function createFileMenu():NativeMenu { var fileMenu:NativeMenu = new NativeMenu(); fileMenu.addEventListener(Event.SELECT, selectCommandMenu); var newCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("New")); newCommand.addEventListener(Event.SELECT, selectCommand); var saveCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("Save")); saveCommand.addEventListener(Event.SELECT, selectCommand); var openRecentMenu:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("Open Recent")); openRecentMenu.submenu = new NativeMenu(); openRecentMenu.submenu.addEventListener(Event.DISPLAYING, updateRecentDocumentMenu); openRecentMenu.submenu.addEventListener(Event.SELECT, selectCommandMenu); return fileMenu; } public function createEditMenu():NativeMenu { var editMenu:NativeMenu = new NativeMenu(); editMenu.addEventListener(Event.SELECT, selectCommandMenu); var copyCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Copy")); copyCommand.addEventListener(Event.SELECT, selectCommand); copyCommand.keyEquivalent = "c"; var pasteCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Paste")); pasteCommand.addEventListener(Event.SELECT, selectCommand); pasteCommand.keyEquivalent = "v"; editMenu.addItem(new NativeMenuItem("", true)); var preferencesCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Preferences")); preferencesCommand.addEventListener(Event.SELECT, selectCommand); return editMenu; } private function updateRecentDocumentMenu(event:Event):void { trace("Updating recent document menu."); var docMenu:NativeMenu = NativeMenu(event.target); for each (var item:NativeMenuItem in docMenu.items) { docMenu.removeItem(item); } for each (var file:File in recentDocuments) {

Page 98: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

91ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel menülerle çalışma

var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name)); menuItem.data = file; menuItem.addEventListener(Event.SELECT, selectRecentDocument); } } private function selectRecentDocument(event:Event):void { trace("Selected recent document: " + event.target.data.name); } private function selectCommand(event:Event):void { trace("Selected command: " + event.target.label); } private function selectCommandMenu(event:Event):void { if (event.currentTarget.parent != null) { var menuItem:NativeMenuItem = findItemForMenu(NativeMenu(event.currentTarget)); if (menuItem != null) { trace("Select event for \"" + event.target.label + "\" command handled by menu: " + menuItem.label); } } else { trace("Select event for \"" + event.target.label + "\" command handled by root menu."); } } private function findItemForMenu(menu:NativeMenu):NativeMenuItem { for each (var item:NativeMenuItem in menu.parent.items) { if (item != null) { if (item.submenu == menu) { return item; } } } return null; } } }

Page 99: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

92

Bölüm 13: Görev çubuğu simgeleri

Çoğu işletim sistemi, Mac OS X dock'u gibi uygulamayı temsil edecek bir simge içeren bir görev çubuğu sağlar. Adobe®

AIR® NativeApplication.nativeApplication.icon özelliği aracılığıyla uygulama görev çubuğu simgesiyle

etkileşik kurmak için bir arabirim sağlar.

Görev çubuğu simgeleri hakkında ek çevrimiçi bilgi

Görev çubuklarıyla çalışma hakkında daha fazla bilgiyi şu kaynaklardan bulabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• Sistem tepsisi ve dock simgelerini kullanma

Dil Başvurusu

• DockIcon

• SystemTrayIcon

Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri

• Flash için Adobe AIR Geliştirici Bağlantısı (ara: 'AIR görev çubuğu simgeleri')

Görev çubuğu simgeleri hakkında

AIR, NativeApplication.nativeApplication.icon nesnesini otomatik olarak oluşturur. Nesne türü işletim

sistemine bağlı olarak DockIcon veya SystemTrayIcon olur. NativeApplication.supportsDockIcon ve

NativeApplication.supportsSystemTrayIcon özelliklerini kullanarak, AIR'in geçerli işletim sisteminde bu

InteractiveIcon alt sınıflarından hangisini desteklediğini belirleyebilirsiniz. InteractiveIcon temel sınıfı, simge için

kullanılan görüntüyü değiştirmek için kullanabileceğiniz width, height ve bitmaps özelliklerini sağlar. Ancak,

DockIcon veya SystemTrayIcon öğelerine özgü özelliklere yanlış işletim sisteminde erişilmesi, bir çalışma zamanı

hatası oluşturur.

Bir simge için kullanılan görüntüyü ayarlamak veya değiştirmek için, bir veya daha çok görüntü içeren bir dizi

oluşturun ve bu diziyi NativeApplication.nativeApplication.icon.bitmaps özelliğine atayın. Görev çubuğu

simgelerinin boyutu farklı işletim sistemlerinde farklı olabilir. Ölçeklemeye bağlı görüntü bozulmasını önlemek için

bitmaps dizisine görüntülerin birden çok boyutunu ekleyebilirsiniz. Birden çok görüntü sağladığınızda, AIR

gerektiğinde görüntüyü ölçekleyerek görev çubuğu simgesinin geçerli görüntü boyutuna en yakın boyutu seçer.

Aşağıdaki örnek, iki görüntüyü kullanarak görev çubuğu simgesine ilişkin görüntüyü ayarlar:

NativeApplication.nativeApplication.icon.bitmaps = [bmp16x16.bitmapData, bmp128x128.bitmapData];

Simge görüntüsünü değiştirmek için bitmaps özelliğine yeni görüntüyü veya görüntüleri içeren bir dizi atayın.

Simgeyi, bir enterFrame or timer olayına yanıt olarak görüntüyü değiştirerek hareketlendirebilirsiniz.

Simgeyi Windows'taki bildirim alanından kaldırmak veya Mac OS X'teki varsayılan simge görünümünü geri yüklemek

için bitmaps öğesini boş bir diziye ayarlayın:

Page 100: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

93ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Görev çubuğu simgeleri

NativeApplication.nativeApplication.icon.bitmaps = [];

Dock simgeleri

AIR, NativeApplication.supportsDockIcontrue olduğunda dock simgelerini destekler.

NativeApplication.nativeApplication.icon özelliği, dock üzerindeki uygulama simgesini temsil eder (pencere

dock simgesini değil).

Not: AIR, Mac OS X altındaki dock üzerinde pencere simgelerini değiştirmeyi desteklemez. Ayrıca, uygulama dock

simgesindeki değişiklikler yalnızca uygulama çalışırken uygulanır — uygulama iptal edildiğinde simge normal

görünümüne geri döner.

Dock simgesi menüleri

Komutlar içeren bir NativeMenu nesnesi oluşturarak ve bu nesneyi

NativeApplication.nativeApplication.icon.menu özelliğine atayarak standart dock menüsüne komutlar

ekleyebilirsiniz. Menüdeki öğeler, standart dock simgesi menü öğelerinin üzerinde görüntülenir.

Dock'u zıplatma

NativeApplication.nativeApplication.icon.bounce() yöntemini çağırarak dock simgesini zıplatabilirsiniz.

bounce() priority parametresini bilgi amaçlı olarak ayarlarsanız, simge bir kez zıplar. Parametreyi kritik olarak

belirlerseniz, simge kullanıcı uygulamayı etkinleştirene kadar zıplar. Priority parametresine ilişkin sabitler

NotificationType sınıfında tanımlanır.

Not: Uygulama zaten etkinse, simge zıplamaz.

Dock simgesi olayları

Dock simgesi tıklatıldığında, NativeApplication nesnesi bir invoke olayı gönderir. Uygulama çalışmıyorsa, sistem

uygulamayı başlatır. Aksi halde, invoke olayı çalışan uygulama örneğine iletilir.

Sistem Tepsisi simgeleri

NativeApplication.supportsSystemTrayIcon, şu anda yalnızca Windows'ta olduğu gibi true olduğunda, AIR

sistem tepsisi simgelerini destekler. Windows'ta, sistem tepsisi simgeleri görev çubuğunun bildirim alanında

görüntülenir. Simge, varsayılan olarak görüntülenir. Simgeyi görüntülemek için, simgenin bitmaps özelliğine

BitmapData nesneleri içeren bir dizi atayın. Simge görüntüsünü değiştirmek için bitmaps öğesine yeni görüntüleri

içeren bir dizi atayın. Simgeyi kaldırmak için bitmaps öğesini null değerine ayarlayın.

Sistem tepsisi simge menüleri

Bir NativeMenu nesnesi oluşturup bu nesneyi NativeApplication.nativeApplication.icon.menu özelliğine

atayarak menüye sistem tepsisi simgesi ekleyebilirsiniz (işletim sistemi, varsayılan menü sağlamaz). Sistem tepsisi

simge menülerine simgeyi sağ tıklatarak erişin.

Page 101: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

94ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Görev çubuğu simgeleri

Sistem tepsisi simge araç ipuçları

Araç ipucu özelliğini ayarlayarak simgeye araç ipucu ekleyebilirsiniz:

NativeApplication.nativeApplication.icon.tooltip = "Application name";

Sistem tepsisi simge olayları

NativeApplication.nativeApplication.icon özelliği tarafından başvurulan SystemTrayIcon nesnesi, click, mouseDown,

mouseUp, rightClick, rightMouseDown ve rightMouseUp olayları için bir ScreenMouseEvent gönderir. Bu olayları

simge menüsüyle birlikte, görünür pencere olmadığında kullanıcıların uygulamanızla etkileşim kurmasına izin

vermek için kullanabilirsiniz.

Örnek: Pencere içermeyen bir uygulama oluşturma

Aşağıdaki örnek, bir sistem tepsisi simgesi içeren, ancak görünür pencere içermeyen bir AIR uygulaması oluşturur.

Sistem tepsisi simgesi, uygulamadan çıkmak için tek bir komut içeren bir menüye sahiptir.

package { import flash.display.Loader; import flash.display.NativeMenu; import flash.display.NativeMenuItem; import flash.display.NativeWindow; import flash.display.Sprite;

import flash.desktop.DockIcon; import flash.desktop.SystemTrayIcon; import flash.events.Event; import flash.net.URLRequest; import flash.desktop.NativeApplication; public class SysTrayApp extends Sprite { public function SysTrayApp():void{ NativeApplication.nativeApplication.autoExit = false; var icon:Loader = new Loader(); var iconMenu:NativeMenu = new NativeMenu(); var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit")); exitCommand.addEventListener(Event.SELECT, function(event:Event):void { NativeApplication.nativeApplication.icon.bitmaps = []; NativeApplication.nativeApplication.exit(); }); if (NativeApplication.supportsSystemTrayIcon) { NativeApplication.nativeApplication.autoExit = false; icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete); icon.load(new URLRequest("icons/AIRApp_16.png")); var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;

Page 102: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

95ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Görev çubuğu simgeleri

systray.tooltip = "AIR application"; systray.menu = iconMenu; } if (NativeApplication.supportsDockIcon){ icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete); icon.load(new URLRequest("icons/AIRApp_128.png")); var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon; dock.menu = iconMenu; } stage.nativeWindow.close(); } private function iconLoadComplete(event:Event):void { NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData]; } } }

Not: Örnek, uygulamanın icons alt dizininde AIRApp_16.png ve AIRApp_128.png adlı görüntü dosyaları olduğunu

varsayar. (Proje klasörünüze kopyalayabileceğiniz örnek simge dosyaları AIR SDK'da mevcuttur.)

Pencere görev çubuğu simge ve düğmeleri

Pencerelerin simgelenmiş temsilleri, kullanıcıların arka plandaki veya simge durumuna küçültülmüş pencerelere

kolayca erişebilmeleri için, genellikle dock veya görev çubuğunun pencere alanında görüntülenir. Mac OS X dock'u,

simge durumuna küçültülen her pencerenin yanı sıra, uygulamanız için de bir simge görüntüler. Microsoft Windows

görev çubuğu, uygulamanızda bulunan normal türdeki her pencereye ilişkin başlık ve program simgesini içeren bir

düğme görüntüler.

Görev çubuğu pencere düğmesini vurgulama

Bir pencere arka planda olduğunda, pencereyle ilişkin ilgilendiği bir olayın gerçekleştiğini kullanıcıya bildirebilirsiniz.

Mac OS X'te, kullanıcıyı uygulama dock simgesini zıplatarak bilgilendirebilirsiniz (“Dock'u zıplatma” sayfa 93

bölümünde açıklandığı gibi). Windows'ta, NativeWindow örneğinin notifyUser() yöntemini çağırarak pencere

görev çubuğu düğmesini vurgulayabilirsiniz. Yönteme iletilen type parametresi, bildirimin aciliyetini belirler.

• NotificationType.CRITICAL: kullanıcı pencereyi ön plana getirene kadar, pencere simgesi yanıp söner.

• NotificationType.INFORMATIONAL: pencere simgesi renk değiştirerek vurgulanır.

Aşağıdaki ifade, bir pencerenin görev çubuğu düğmesini vurgular:

stage.nativeWindow.notifyUser(NotificationType.CRITICAL);

İşletim sisteminde pencere düzeyinde bildirimi desteklemeyenNativeWindow.notifyUser() yönteminin

çağrılması etkisizdir. Pencere bildiriminin desteklenip desteklenmediğini belirlemek için

NativeWindow.supportsNotification özelliğini kullanın.

Page 103: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

96ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Görev çubuğu simgeleri

Görev çubuğu düğmeleri veya simgeleri içermeyen pencereler oluşturma

Windows işletim sisteminde, utility veya lightweight türüyle oluşturulan pencereler görev çubuğunda görünmez.

Görünür olmayan pencereler görev çubuğunda da görüntülenmez.

İlk pencerenin normal türünde olması gerektiğinden, görev çubuğunda görünen herhangi bir pencere içermeyen bir

uygulama oluşturmak için ilk pencereyi kapatmalı veya görünmez olarak bırakmalısınız. Uygulamayı iptal etmeden

uygulamanızdaki tüm pencereleri kpatmak için, son pencereyi kapatmadan önce NativeApplication nesnesinin

autoExit özelliğini false olarak ayarlayın. İlk pencerenin görünür olmasını engellemek için, uygulama tanımlayıcı

dosyasının <initalWindow> öğesine <visible>false</visible> özelliğini ekleyin (ve visible özelliğini true

olarak ayarlamayın veya pencerenin activate() yöntemini çağırmayın).

Uygulama tarafından açılan yeni pencerelerde, pencere yapıcısına iletilen NativeWindowInitOption nesnesinin type

özelliğini NativeWindowType.UTILITY veya NativeWindowType.LIGHTWEIGHT olarak ayarlayın.

Mac OS X'te, simge durumuna küçültülen pencereler dock görev çubuğunda görüntülenir. Pencereyi simge durumuna

küçültmek yerine gizlediğinizde, küçültülen simgenin görüntülenmesini engelleyebilirsiniz. Aşağıdaki örnek bir

nativeWindowDisplayState değişiklik olayını dinler ve pencere simge durumuna küçültüldüğünde bu olayı iptal

eder. Bunun yerine işleyici, pencerenin visible özelliğini false olarak ayarlar:

private function preventMinimize(event:NativeWindowDisplayStateEvent):void{ if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED){ event.preventDefault(); event.target.visible = false; } }

Mac OS X dock'unda bir pencere simge durumuna küçültülmüşse, visible özelliğini false olarak ayarladığınızda

dock simgesi kaldırılmaz. Kullanıcı yine de, pencerenin yeniden görünmesi için simgeyi tıklatabilir.

Page 104: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

97

Bölüm 14: Dosya sistemiyle çalışma

Ana bilgisayarın dosya sistemine erişmek için, Adobe® AIR™ dosya sistemi API'si tarafından sağlanan sınıfları

kullanırsınız. Bu sınıfları kullanarak dizinlere ve dosyalara erişebilir ve bunları yönetebilir, oluşturabilir, dosyalara veri

yazabilir, vb. işlemler gerçekleştirebilirsiniz.

AIR Dosya API'si hakkında ek çevrimiçi bilgiler

Dosya API sınıflarını kullanma hakkında daha fazla bilgiye şu kaynaklardan ulaşabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• Metin dosyası düzenleyicisi oluşturma

Dil Başvurusu

• File

• FileStream

• FileMode

Adobe Geliştirici Bağlantısı Makaleler ve Örnekler

• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR filesystem'ı arayın)

AIR dosyası temel bilgileri

Adobe AIR hem dosyalara hem de klasörlere erişmek, bunları oluşturmak ve yönetmek için kullanabileceğiniz sınıflar

sağlar. flash.filesystem paketinde bulunan bu sınıflar şu şekilde kullanılır:

File sınıfındaki bazı yöntemlerin hem senkronize hem de senkronize olmayan sürümleri vardır:

• File.copyTo() veFile.copyToAsync()

• File.deleteDirectory() ve File.deleteDirectoryAsync()

• File.deleteFile() ve File.deleteFileAsync()

• File.getDirectoryListing() ve File.getDirectoryListingAsync()

Dosya sınıfları Açıklama

File File nesnesi bir dosya veya dizin yolunu temsil eder. Bir file nesnesini, dosya veya klasörle etkileşim başlatan bir

dosyaya veya klasöre işaretçi oluşturmak için kullanırsınız.

FileMode FileMode sınıfı, FileStream sınıfının open() ve openAsync() yöntemlerinin fileMode parametresinde kullanılan

dize sabitlerini tanımlar. Bu yöntemlerin fileMode parametresi, dosya açıldıktan sonra FileStream nesnesi

tarafından kullanılabilen, aralarında yazma, okuma, ekleme ve güncelleme bulunan özellikleri belirler.

FileStream FileStream nesnesi dosyaları okuma ve yazma için açmada kullanılır. Yeni veya var olan bir dosyaya işaret eden bir

File nesnesi oluşturduktan sonra o işaretçiyi FileStream nesnesine iletirsiniz, böylece dosyanın içindeki verileri açıp

işleyebilirsiniz.

Page 105: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

98ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

• File.moveTo() ve File.moveToAsync()

• File.moveToTrash() ve File.moveToTrashAsync()

Ayrıca FileStream işlemlerinin senkronize veya senkronize olmayan şekilde çalışmasını FileStream nesnesinin dosyayı

açma şekli belirler: open() yöntemini çağırarak veya openAsync() yöntemini çağırarak.

Senkronize olmayan sürümler arka planda çalışan işlemleri başlatmanızı ve tamamlandığında (veya hata olayı

oluştuğunda) olayları göndermenizi sağlar. Bu senkronize olmayan işlemler arka planda sürerken, başka kod

çalışabilir. İşlemlerin senkronize olmayan sürümleriyle, işlevi çağıran File veya FileStream nesnesinin

addEventListener() yöntemini kullanarak olay dinleyicisi işlevleri oluşturmalısınız.

Senkronize sürümler sayesinde, olay dinleyicileri ayarlamaya dayanmayan daha basit kod yazabilirsiniz. Ancak,

senkronize bir yöntem çalışırken başka kod çalışamadığı için, görüntüleme nesnesi oluşturma ve animasyon gibi

önemli işlemler duraklatılabilir.

File nesneleriyle çalışma

File nesnesi dosya sistemindeki bir dosyaya veya dizine işaretçidir.

File sınıfı FileReference sınıfını genişletir. AIR'in yanı sıra Adobe® Flash® Player'da da mevcut olan FileReference sınıfı

bir dosyaya işaretçiyi temsil eder, ancak File sınıfı güvenlik nedenleriyle Flash Player'da açık olmayan özellikleri ve

yöntemleri ekler (tarayıcıda çalışan bir SWF dosyasında).

File sınıfı hakkında

File sınıfını aşağıdaki işlemler için kullanabilirsiniz:

• Kullanıcı dizini, kullanıcının documents dizini, uygulamanın başlatıldığı dizin ve uygulama dizini de dahil olmak

üzere özel dizinlerin yolunu alma

• Dosyaları ve dizinleri kopyalama

• Dosyaları ve dizinleri taşıma

• Dosyaları ve dizinleri silme (veya çöp kutusuna taşıma)

• Bir dizinde bulunan dosyaları ve dizinleri listeleme

• Geçici dosyalar ve klasörler oluşturma

Bir File nesnesi dosya yoluna işaret ettikten sonra, FileStream sınıfını kullanarak dosya verilerini okumak ve yazmak

için dosya yolunu kullanabilirsiniz.

File nesnesi henüz var olmayan bir dosyanın veya dizinin yoluna işaret edebilir. Böyle bir File nesnesini dosya veya

dizin oluştururken kullanabilirsiniz.

File nesnelerinin Yolları

Her File nesnesi, yolunu tanımlayan iki özelliğe sahiptir:

Page 106: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

99ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

File sınıfı hem Mac hem de Windows'ta standart dizinlere işaret etmek için özellikler içerir.

File nesnesini bir dizine işaret etme

Bir File nesnesini bir dizine işaret etmesi için ayarlamanın farklı yolları vardır.

Kullanıcının ana dizinine işaret etme

Bir File nesnesini kullanıcının ana dizinine yönlendirebilirsiniz. Windows'ta ana dizin "Belgelerim" dizininin üst

öğesidir (örneğin "C:\Documents and Settings\userName\Belgelerim"). Mac OS'de bu Users/userName dizinidir.

Aşağıdaki kod bir File nesnesini ana dizinin AIR Test alt dizinine işaret etmesi için ayarlar:

var file:File = File.userDirectory.resolvePath("AIR Test");

Kullanıcının documents dizinine işaret etme

Bir File nesnesini kullanıcının documents dizinine yönlendirebilirsiniz. Windows'ta bu genellikle "Belgelerim"

dizinidir (örneğin "C:\Documents and Settings\userName\Belgelerim"). Mac OS'de Users/userName/Documents

dizinidir. Aşağıdaki kod bir File nesnesini documents dizininin AIR Test alt dizinine işaret etmesi için ayarlar:

var file:File = File.documentsDirectory.resolvePath("AIR Test");

Masaüstü dizinine işaret etme

Bir File nesnesini masaüstüne işaret edebilirsiniz. Aşağıdaki kod bir File nesnesini masaüstünün AIR Test alt dizinine

işaret etmesi için ayarlar:

var file:File = File.desktopDirectory.resolvePath("AIR Test");

Uygulama depolama dizinine işaret etme

Bir File nesnesini uygulama depolama dizinine işaret edebilirsiniz. Her AIR uygulaması için, uygulama depolama

dizinini tanımlayan ilişkilendirilmiş, benzersiz bir yol vardır. Bu dizin her uygulama ve kullanıcı için benzersizdir. Bu

dizini kullanıcıya özgü, uygulamaya özgü verileri saklamak için kullanmak isteyebilirsiniz (kullanıcı verileri ve

tercihler dosyaları gibi). Örneğin aşağıdaki kod bir File nesnesini uygulama depolama dizininde bulunan bir tercihler

dosyası olan prefs.xml dosyasına işaret eder:

var file:File = File.applicationStorageDirectory; file = file.resolvePath("prefs.xml";

Uygulama depolama dizininin konumu kullanıcı adına, uygulama kimliğine ve yayıncı kimliğine bağlıdır:

• Mac OS'de—Şu dizinde:

/Users/user name/Library/Preferences/applicationID.publisherID/Local Store/

Örneğin:

Özellik Açıklama

nativePath Bir dosyanın platforma özgü yolunu belirtir. Örneğin Windows'ta bir yol "c:\Sample directory\test.txt" olurken

Mac OS'de "/Sample directory/test.txt" olabilir. nativePath özelliği dizin ayırıcı karakteri olarak Windows'ta

ters eğik çizgi (\) karakterini, Mac OS'de eğik çizgi (/) karakterini kullanır.

url Bir dosyaya işaret etmek için, dosya URL şemasını kullanabilir. Örneğin Windows'ta bir yol

"file:///c:/Sample%20directory/test.txt" olurken Mac OS'de "file:///Sample%20directory/test.txt" olabilir.

Çalışma zamanı file öğesinin yanında başka özel URL şemaları da içerir ve bunlar “Desteklenen URL şemaları”

sayfa 103 bölümünde anlatılmaktadır

Page 107: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

100ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

/Users/babbage/Library/Preferences/com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1/Local Store

• Windows'ta—Belgeler ve ayarlar dizininde, şu konumda:

user name/Application Data/applicationID.publisherID/Local Store/

Örneğin:

C:\Documents and Settings\babbage\Application Data\com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Local Store

File.applicationStorageDirectory ile oluşturulan bir File nesnesinin URL'si (ve url özelliği), aşağıda

gösterildiği gibi app-storage URL şemasını kullanır (bkz. “Desteklenen URL şemaları” sayfa 103):

var dir:File = File.applicationStorageDirectory; dir = dir.resolvePath("preferences"); trace(dir.url); // app-storage:/preferences

Uygulama dizinine işaret etme

Bir File nesnesini uygulamanın yüklendiği, uygulama dizini olarak bilinen dizine işaret edebilirsiniz. Bu dizine

File.applicationDirectory özelliğini kullanarak başvurabilirsiniz. Bu dizini uygulama tanımlayıcı dosyasını veya

uygulamayla yüklenen başka kaynakları incelemek için kullanabilirsiniz. Örneğin aşağıdaki kod bir File nesnesini

uygulama dizinindeki images adlı bir dizine işaret eder:

var dir:File = File.applicationDirectory; dir = dir.resolvePath("images");

File.applicationDirectory ile oluşturulan bir File nesnesinin URL'si (ve url özelliği), aşağıda gösterildiği gibi app

URL şemasını kullanır (bkz. “Desteklenen URL şemaları” sayfa 103):

var dir:File = File.applicationDirectory; dir = dir.resolvePath("images"); trace(dir.url); // app:/images

Dosya sistemi köküne işaret etme

File.getRootDirectories() yöntemi bir Windows bilgisayarındaki C: ve bağlanmış birimler gibi tüm kök

birimleri listeler. Mac'te bu yöntem her zaman bilgisayarın benzersiz kök dizinini ("/" dizini) döndürür.

Açık bir dizine işaret etme

Aşağıdaki örnekte olduğu gibi, File nesnesinin nativePath özelliğini ayarlayarak File nesnesini açık bir dizine işaret

edebilirsiniz (Windows'ta):

var file:File = new File(); file.nativePath = "C:\\AIR Test\";

Göreceli yollara gitme

Belirli bir yola göreceli olan bir yol edinmek için resolvePath() yöntemini kullanabilirsiniz. Aşağıdaki kod bir File

nesnesini kullanıcının ana dizininin "AIR Test" alt dizinine işaret etmesi için ayarlar:

var file:File = File.userDirectory; file = file.resolvePath("AIR Test");

Ayrıca, aşağıda gösterildiği gibi File nesnesini URL dizesine bağlı bir dizine işaret etmek için de nesnenin url özelliğini

kullanabilirsiniz:

Page 108: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

101ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

var urlStr:String = "file:///C:/AIR Test/"; var file:File = new File() file.url = urlStr;

Daha fazla bilgi için bkz. “Dosya yollarını değiştirme” sayfa 103.

Kullanıcının bir dizin seçmek için gözatmasını sağlama

File sınıfı, kullanıcının nesneye atamak için bir dizin seçebileceği sistem iletişim kutusu sağlayan

browseForDirectory() yöntemini içerir. browseForDirectory() yöntemi senkronize değildir. Kullanıcı bir dizin

seçip Aç düğmesini tıklatırsa bir select olayı veya kullanıcı İptal düğmesini tıklatırsa bir cancel olayı gönderir.

Örneğin aşağıdaki kod kullanıcının bir dizin seçmesine olanak tanır ve seçilirse dizin yolunu çıkarır:

var file:File = new File(); file.addEventListener(Event.SELECT, dirSelected); file.browseForDirectory("Select a directory"); function dirSelected(e:Event):void { trace(file.nativePath); }

Uygulamanın çağrıldığı dizine işaret etme

Uygulama çağrıldığında gönderilen InvokeEvent nesnesinin currentDirectory özelliğini işaretleyerek bir

uygulamanın çağrıldığı dizin konumunu alabilirsiniz. Ayrıntılar için bkz. “Komut satırı argümanlarını yakalama”

sayfa 258.

File nesnesini bir dosyaya işaret etme

Bir File nesnesinin işaret ettiği dosyayı ayarlamanın farklı yolları vardır.

Açık dosya yoluna işaret etme

Belirli bir yola göreceli olan bir yol edinmek için resolvePath() yöntemini kullanabilirsiniz. Örneğin aşağıdaki kod

bir File nesnesini uygulama depolama dizininin içindeki bir log.txt dosyasına işaret etmek üzere ayarlar:

var file:File = File.applicationStorageDirectory; file = file.resolvePath("log.txt");

Aşağıda gösterildiği gibi File nesnesini URL dizesine bağlı bir dosyaya veya dizine işaret etmek için de nesnenin url

özelliğini kullanabilirsiniz:

var urlStr:String = "file:///C:/AIR Test/test.txt"; var file:File = new File() file.url = urlStr;

Ayrıca URL'yi aşağıda olduğu gibi File() yapıcı işlevine de iletebilirsiniz:

var urlStr:String = "file:///C:/AIR Test/test.txt"; var file:File = new File(urlStr);

url özelliği her zaman URL'nin URI kodlu sürümünü döndürür (örneğin boşluklar "%20 ile değiştirilir):

file.url = "file:///c:/AIR Test"; trace(file.url); // file:///c:/AIR%20Test

Page 109: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

102ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Ayrıca açık bir yol ayarlamak için File nesnesinin nativePath özelliğini de kullanabilirsiniz. Örneğin aşağıdaki kod

Windows yüklü bir bilgisayarda çalıştırıldığında, File nesnesini, C: sürücüsünün AIR Test alt dizinindeki test.txt

dosyasına ayarlar:

var file:File = new File(); file.nativePath = "C:/AIR Test/test.txt";

Ayrıca bu yolu aşağıda olduğu gibi File() yapıcı işlevine de iletebilirsiniz:

var file:File = new File("C:/AIR Test/test.txt");

Windows'ta eğik çizgi (/) veya ters eğik çizgi (\) karakterini nativePath özelliği için yol sınırlayıcı olarak

kullanabilirsiniz. Mac OS'de nativePath için yol sınırlayıcı olarak eğik çizgi (/) karakterini kullanın:

var file:File = new File(/Users/dijkstra/AIR Test/test.txt");

Daha fazla bilgi için bkz. “Dosya yollarını değiştirme” sayfa 103.

Bir dizindeki dosyaları numaralandırma

Bir dizinin kök düzeyinde dosyalara ve alt dizinlere işaret eden File nesnelerinin bir dizisini almak için File nesnesinin

getDirectoryListing() yöntemini kullanabilirsiniz. Daha fazla bilgi için bkz. “Dizinleri numaralandırma”

sayfa 107.

Kullanıcının bir dosya seçmek için gözatmasını sağlama

File sınıfı, kullanıcının nesneye atamak için bir dosya seçebileceği sistem iletişim kutusu sağlayan aşağıdaki yöntemleri

içerir.

• browseForOpen()

• browseForSave()

• browseForOpenMultiple()

Bu yöntemlerin tümü senkronize olmayan yöntemlerdir. Kullanıcı bir dosya seçtiğinde (veya browseForSave()

durumunda hedef yol) browseForOpen() ve browseForSave() yöntemleri select olayını gönderir.

browseForOpen() ve browseForSave() yöntemleriyle, seçimden sonra hedef File nesnesi seçili dosyalara işaret eder.

Kullanıcı dosyaları seçtiğinde, browseForOpenMultiple() yöntemi bir selectMultiple olayı gönderir.

selectMultiple olayı, File nesneleri dizisi olan bir files özelliğine sahip olan (seçili dosyalara işaret eden)

FileListEvent türüdür.

Örneğin aşağıdaki kod kullanıcıya, kullanıcının bir dosya seçebileceği “Aç” iletişim kutusunu sunar:

var fileToOpen:File = File.documentsDirectory; selectTextFile(fileToOpen); function selectTextFile(root:File):void { var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml"); root.browseForOpen("Open", [txtFilter]); root.addEventListener(Event.SELECT, fileSelected); } function fileSelected(event:Event):void { trace(fileToOpen.nativePath); }

Page 110: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

103ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Bir browse yöntemini çağırdığınızda uygulamada başka bir tarayıcı iletişim kutusu açıksa, çalışma zamanı bir Hata

istisnası atar.

Dosya yollarını değiştirme

Ayrıca aşağıdaki örneklerde olduğu gibi, var olan bir File nesnesinin yolunu resolvePath() yöntemini çağırarak veya

nesnenin nativePath ya da url özelliğini değiştirerek de değiştirebilirsiniz:

var file1:File = File.documentsDirectory; file1 = file1.resolvePath("AIR Test"); trace(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test var file2:File = File.documentsDirectory; file2 = file2.resolvePath(".."); trace(file2.nativePath); // C:\Documents and Settings\userName var file3:File = File.documentsDirectory; file3.nativePath += "/subdirectory"; trace(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory var file4:File = new File(); file4.url = "file:///c:/AIR Test/test.txt"; trace(file4.nativePath); // C:\AIR Test\test.txt

nativePath özelliğini kullanırken, Windows'ta dizin ayırıcı karakteri olarak eğik çizgi (/) veya ters eğik çizgi (\)

karakterini; Mac OS'de ise eğik çizgi (/) karakterini kullanırsınız. Windows'ta bir dize değişmezinde eğik çizgi

karakterini iki kere yazmayı unutmayın.

Desteklenen URL şemaları

Bir File nesnesinin url özelliğini tanımlarken, aşağıdaki URL şemalarından herhangi birini kullanabilirsiniz:

İki dosya arasındaki göreceli yolu bulma

İki dosya arasındaki göreceli yolu bulmak için getRelativePath() yöntemini kullanabilirsiniz:

var file1:File = File.documentsDirectory.resolvePath("AIR Test"); var file2:File = File.documentsDirectory file2 = file2.resolvePath("AIR Test/bob/test.txt"); trace(file1.getRelativePath(file2)); // bob/test.txt

URL şeması Açıklama

file Dosya sisteminin köküne göreceli olan bir yol belirtmek için kullanın. Örneğin:

file:///c:/AIR Test/test.txt

URL standardı bir dosya URL'sinin file://<host>/<path> formunu alacağını belirtir. Özel bir durum olarak

<host>, "URL'nin yorumlandığı bilgisayar" olarak yorumlanan boş dize olabilir. Bu nedenle dosya URL'leri genellikle

üç eğik çizgiye (///) sahiptir.

app Yüklü uygulamanın kök dizinine göreceli bir yol belirtmek için kullanın (yüklü uygulama için application.xml

dosyasını içeren dizin). Örneğin aşağıdaki yol, yüklü uygulamanın dizininin görüntüler alt dizinine işaret eder:

app:/images

app-storage Uygulama depolama dizinine göreceli bir yol belirtmek için kullanın. AIR her yüklenen uygulama için, o uygulamaya

özgü verilerin saklanmasına yönelik kullanışlı bir yer olan benzersiz bir uygulama depolama dizini tanımlar. Örneğin

aşağıdaki yol, uygulama depolama dizininin ayarlar alt dizininde bulunan bir prefs.xml dosyasını işaret eder:

app-storage:/settings/prefs.xml

Page 111: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

104ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

getRelativePath() yönteminin ikinci parametresi olan useDotDot parametresi, .. sözdiziminin üst dizinleri

göstermek için sonuçlarda döndürülmesine izin verir:

var file1:File = File.documentsDirectory; file1 = file1.resolvePath("AIR Test"); var file2:File = File.documentsDirectory; file2 = file2.resolvePath("AIR Test/bob/test.txt"); var file3:File = File.documentsDirectory; file3 = file3.resolvePath("AIR Test/susan/test.txt"); trace(file2.getRelativePath(file1, true)); // ../.. trace(file3.getRelativePath(file2, true)); // ../../bob/test.txt

Dosya adlarının kurallı sürümlerini alma

Dosya ve yol adları genellikle büyük/küçük harf duyarlı değildir. Aşağıdaki örnekte iki File nesnesi aynı dosyaya işaret

etmektedir:

File.documentsDirectory.resolvePath("test.txt"); File.documentsDirectory.resolvePath("TeSt.TxT");

Ancak belgeler ve dizin adları büyük harf içerir. Örneğin aşağıda, aşağıdaki örneklerde olduğu gibi documents

dizininde AIR Test adlı bir klasör olduğunu varsayılmıştır:

var file:File = File.documentsDirectory.resolvePath("AIR test"); trace(file.nativePath); // ... AIR test file.canonicalize(); trace(file.nativePath); // ... AIR Test

canonicalize yöntemi nativePath nesnesini, dosya veya dizin adı için doğru şekilde büyük harf kullanmak üzere

dönüştürür.

Aşağıdaki örneklerde gösterildiği gibi Windows'ta kısa dosya adlarını ("8.3" adlar) uzun dosya adlarına dönüştürmek

için canonicalize() yöntemini de kullanabilirsiniz:

var path:File = new File(); path.nativePath = "C:\\AIR~1"; path.canonicalize(); trace(path.nativePath); // C:\AIR Test

Paketlerle ve sembolik linklerle çalışma

Birçok işletim sistemi paket dosyalarını ve sembolik link dosyalarını destekler:

PaketlerMac OS'de dizinler paketler olarak belirlenebilir ve Mac OS Finder'da bir dizin olarak değil tek bir dosya

olarak görünür.

Sembolik linklerSembolik linkler bir dosyanın diskteki başka bir dosyaya veya dizine işaret etmesini sağlar. Sembolik

linkler başka adlara benzer olsa da, aynı değildir. Başka ad her zaman bir dosya olarak bildirilir (dizin olarak değil) ve

başka ada veya kısayola okuma ya da yazma işlemi hiçbir zaman işaret ettiği orijinal dosyayı veya dizini etkilemez.

Diğer yandan sembolik link tam olarak işaret ettiği dosya veya dizin gibi davranır. Bir dosya veya dizin olarak

bildirilebilir ve sembolik linke okuma veya yazma işlemi sembolik linkin kendisini değil, işaret ettiği dosyayı veya

dizini etkiler.

Page 112: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

105ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

File sınıfı, bir File nesnesinin bir pakete veya sembolik linke başvurup başvurmadığını kontrol etmek için isPackage

ve isSymbolicLink özelliklerini içerir.

Aşağıdaki kod kullanıcının masaüstü dizini üzerinden, paket olmayan alt dizinleri listeleyerek yinelenir:

var desktopNodes:File = File.desktopDirectory.getDirectoryListing(); for (var i:uint = 0; i < desktopNodes.length; i++) { if (desktopNodes[i].isDirectory && !!desktopNodes[i].isPackage) { trace(desktopNodes[i].name); } }

Aşağıdaki kod kullanıcının masaüstü dizini üzerinden, sembolik linkler olmayan dosyaları ve dizinleri listeleyerek

yinelenir:

var desktopNodes:File = File.desktopDirectory.getDirectoryListing(); for (var i:uint = 0; i < desktopNodes.length; i++) { if (!desktopNodes[i].isSymbolicLink) { trace(desktopNodes[i].name); } }

canonicalize() yöntemi, linkin başvurduğu dosyaya veya dizine işaret etmek için sembolik bir linkin yolunu

değiştirir. Aşağıdaki kod kullanıcının masaüstü dizini üzerinden yinelenir ve sembolik linkler olan dosyalar tarafından

başvurulan yolları bildirir:

var desktopNodes:File = File.desktopDirectory.getDirectoryListing(); for (var i:uint = 0; i < desktopNodes.length; i++) { if (desktopNodes[i].isSymbolicLink) { var linkNode:File = desktopNodes[i] as File; linkNode.canonicalize(); trace(linkNode.nativePath); } }

Bir birimdeki kullanılabilir alanı belirleme

Bir File nesnesinin spaceAvailable özelliği, Dosya konumunda bayt olarak kullanılabilir olan alandır. Örneğin

aşağıdaki kod uygulama depolama dizininde kullanılabilir olan alanı kontrol eder:

trace(File.applicationStorageDirectory.spaceAvailable);

File nesnesi bir dizine başvurursa, spaceAvailable özelliği, dizinde dosyaların kullanabileceği alanı gösterir. File

nesnesi bir dosyaya başvurursa, spaceAvailable özelliği dosyanın büyütülebileceği alanı gösterir. Dosya konumu

yoksa, spaceAvailable özelliği 0'a ayarlanır. File nesnesi sembolik bir linke başvurursa, spaceAvailable özelliği

sembolik linkin işaret ettiği konumdaki kullanılabilir alana ayarlanır.

Genellikle bir dizin veya dosya için kullanılabilir olan alan, dizini veya dosyayı içeren birimdeki kullanılabilir alanla

aynıdır. Ancak kullanılabilir alan, kotaları ve dizin başına sınırlamaları hesaba katabilir.

Page 113: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

106ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Bir dosyayı veya dizini bir birime eklemek genellikle dosyanın gerçek boyutundan veya dizin içeriğinin boyutundan

daha fazla alan gerektirir. Örneğin işletim sistemi dizin bilgilerini saklamak için daha fazla alan gerektirebilir. Veya

gerekli disk kesimleri ek alan kullanabilir. Ayrıca kullanılabilir alanlar dinamik olarak değişir. Dolayısıyla bildirilen

alanın tamamını dosya depolama için ayıramazsınız. Dosya sistemine yazma hakkında bilgi için bkz. “Dosyaları

okuma ve dosyalara yazma” sayfa 111.

Dosya sistemi bilgilerini alma

File sınıfı, dosya sistemi hakkında bazı yararlı bilgiler sağlayan aşağıdaki statik özellikleri içerir:

Capabilities sınıfı da dosyalarla çalışırken yararlı olabilecek sistem bilgileri içerir:

Dizinlerle çalışma

Çalışma zamanı size yerel dosya sistemindeki dizinlerle çalışmaya yönelik özellikler sağlar.

Dizinlere işaret eden File nesneleri oluşturma hakkında bilgi için bkz. “File nesnesini bir dizine işaret etme” sayfa 99.

Dizin oluşturma

File.createDirectory() yöntemi bir dizin oluşturmanızı sağlar. Örneğin aşağıdaki kod, kullanıcının ana dizininin

alt dizini olarak AIR Test adlı bir dosya oluşturur.

var dir:File = File.userDirectory.resolvePath("AIR Test"); dir.createDirectory();

Dizin varsa, createDirectory() yöntemi bir işlem gerçekleştirmez.

Ayrıca bazı modlarda FileStream nesnesi dosyaları açarken dizin oluşturur. Bir FileStream örneğini

FileMode.APPEND veya FileMode.WRITE olarak ayarlı FileStream() yapıcı kümesinin fileMode parametresiyle

başlattığınızda, eksik dizinler oluşturulur. Daha fazla bilgi için bkz. “Dosyaları okuma ve dosyalara yazma için iş akışı”

sayfa 111.

Özellik Açıklama

File.lineEnding Ana bilgisayar işletim sistemi tarafından kullanılan satır sonlandırıcı karakter dizisi. Bu, Mac OS'de satır besleme

karakteridir. Bu, Windows'ta arkasından satır besleme karakteri gelen satır başı karakteridir.

File.separator Ana bilgisayar işletim sisteminin yol bileşeni ayırıcı karakteri. Bu, Mac OS'de eğik çizgi (/) karakteridir. Bu,

Windows'ta ters eğik çizgi (\) karakteridir.

File.systemCharset Ana bilgisayar işletim sistemi tarafından dosyalar için kullanılan varsayılan kodlama. Bu, işletim sistemi

tarafından kullanılan diline karşılık gelen karakter kümesiyle de ilgilidir.

Özellik Açıklama

Capabilities.hasIME Oynatıcının bir giriş yöntemi düzenleyicisi (IME) yüklü (true) bir sistem üzerinde mi, yüklü olmayan (false) bir

sistem üzerinde mi çalıştığını belirtir.

Capabilities.language Oynatıcının üzerinde çalıştığı sistemin dil kodunu belirtir.

Capabilities.os Geçerli işletim sistemini belirtir.

Page 114: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

107ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Geçici bir dizin oluşturma

File sınıfı, aşağıdaki örnekte olduğu gibi Sistem için geçici bir dizin klasöründe bir dizin oluşturan

createTempDirectory() yöntemini içerir.

var temp:File = File.createTempDirectory();

createTempDirectory() yöntemi otomatik olarak benzersiz bir geçici dizin oluşturur (yeni bir benzersiz konum

belirlemekle uğraşmamış olursunuz).

Geçici bir dizini, bir uygulama oturumu için kullanılan geçici dosyaları saklamak için kullanabilirsiniz. Sistem geçici

dizininde yeni, benzersiz geçici dosyalar oluşturmak için bir createTempFile() yöntemi bulunduğunu unutmayın.

Otomatik olarak silinmediği için, uygulamayı kapamadan önce geçici dizini silmek isteyebilirsiniz.

Dizinleri numaralandırma

Bir dizindeki dosyalara ve alt klasörlere işaret eden bir File nesneleri dizisini almak için, File nesnesinin

getDirectoryListing() veya getDirectoryListingAsync() yöntemini kullanabilirsiniz.

Örneğin aşağıdaki kod kullanıcının documents dizininin (alt dizinleri incelemeden) içeriğini listeler.

var directory:File = File.documentsDirectory; var contents:Array = directory.getDirectoryListing(); for (var i:uint = 0; i < contents.length; i++) { trace(contents[i].name, contents[i].size); }

Yöntemin senkronize olmayan sürümünü kullanırken, directoryListing olay nesnesi, dizinlerle ilgili File

nesnelerinin dizisi olan bir files özelliğine sahiptir:

var directory:File = File.documentsDirectory; directory.getDirectoryListingAsync(); directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler); function dirListHandler(event:FileListEvent):void { var contents:Array = event.files; for (var i:uint = 0; i < contents.length; i++) { trace(contents[i].name, contents[i].size); } }

Dizinleri kopyalama ve taşıma

Bir dizini, bir dosyayı kopyalamak veya taşımak için kullanacağınız yöntemlerin aynılarını kullanarak kopyalayabilir

veya taşıyabilirsiniz. Örneğin aşağıdaki kod bir dizini senkronize olarak kopyalar:

var sourceDir:File = File.documentsDirectory.resolvePath("AIR Test"); var resultDir:File = File.documentsDirectory.resolvePath("AIR Test Copy"); sourceDir.copyTo(resultDir);

copyTo() yönteminin overwrite parametresi için true değerini belirttiğinizde, mevcut bir hedef dizindeki tüm

dosyalar ve klasörler silinir ve yerine kaynak dizindeki dosyalar ve klasörler konur (hedef dosya kaynak dizinde olmasa

bile).

Page 115: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

108ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

copyTo() yönteminin newLocation parametresi olarak belirttiğiniz dizin, sonuçta oluşan dizinin yolunu belirtir;

sonuçta oluşan dizini içerecek olan üst dizini belirtmez.

Ayrıntılar için bkz. “Dosyaları kopyalama ve taşıma” sayfa 109.

Dizin içeriğini silme

File sınıfı bir deleteDirectory() ve bir deleteDirectoryAsync() yöntemi içerir. İlki senkronize, ikincisi

senkronize olmayan bir şekilde çalışan bu yöntemler dizinleri siler (bkz. “AIR dosyası temel bilgileri” sayfa 97). Her iki

yöntem de deleteDirectoryContents parametresini içerir (Boolean değeri alır); bu parametre true olarak

ayarlıyken (varsayılan değer false değeridir) yönteme yapılan çağrı boş olmayan dizinleri siler; aksi takdirde yalnızca

boş dizinler silinir.

Örneğin aşağıdaki kod kullanıcının documents dizininin AIR Test alt dizinini senkronize olarak siler:

var directory:File = File.documentsDirectory.resolvePath("AIR Test"); directory.deleteDirectory(true);

Aşağıdaki kod kullanıcının documents dizininin AIR Test alt dizinini senkronize olmayan bir şekilde siler:

var directory:File = File.documentsDirectory.resolvePath("AIR Test"); directory.addEventListener(Event.COMPLETE, completeHandler) directory.deleteDirectoryAsync(true); function completeHandler(event:Event):void { trace("Deleted.") }

Ayrıca, bir dizini Sistem çöp kutusuna taşımak için kullanabileceğiniz moveToTrash() ve moveToTrashAsync()

yöntemleri de bulunmaktadır. Ayrıntılar için bkz. “Bir dosyayı çöp kutusuna taşıma” sayfa 110.

Dosyalarla çalışma

AIR dosya API'sini kullanarak uygulamalarınıza temel dosya etkileşim özellikleri ekleyebilirsiniz. Örneğin dosyaları

okuyabilir, yazabilir, kopyalayabilir ve silebilir, vb. işlemler gerçekleştirebilirsiniz. Uygulamalarınız yerel dosya

sistemine erişebileceği için, önceden yapmadıysanız “AIR güvenliği” sayfa 23 bölümüne bakın.

Not: Bir dosya türünü AIR uygulamasıyla ilişkilendirebilirsiniz (böylece uygulama çift tıklatılarak açılabilir). Ayrıntılar

için bkz. “Dosya ilişkilendirmelerini yönetme” sayfa 265.

Dosya bilgilerini alma

File sınıfı, bir File nesnesinin işaret ettiği dosya veya dizin hakkında bilgi sağlayan aşağıdaki özellikleri içerir:

Dosya özelliği Açıklama

creationDate Yerel diskteki dosyanın oluşturulma tarihi.

creator Geçersiz—extension özelliğini kullanın. (Bu özellik dosyanın Macintosh oluşturucu türünü bildirir, bu yalnızca

Mac OS X'ten önceki Mac OS sürümlerinde kullanılır.)

exists Başvurulan dosyanın veya dizinin var olup olmadığı.

Page 116: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

109ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Bu özellikler hakkında ayrıntılı bilgi için ActionScript 3.0 Dil ve Bileşen Başvurusu

(http://www.adobe.com/go/learn_air_aslr_tr) bölümündeki File sınıfı girişine bakın.

Dosyaları kopyalama ve taşıma

File sınıfı dosyaları veya dizinleri kopyalamak için iki yöntem içerir: copyTo() ve copyToAsync(). File sınıfı dosyaları

veya dizinleri taşımak için iki yöntem içerir: moveTo() ve moveToAsync(). copyTo() ve moveTo() yöntemleri

senkronize çalışır; copyToAsync() ve moveToAsync() yöntemleri senkronize olmayan bir şekilde çalışır (bkz. “AIR

dosyası temel bilgileri” sayfa 97).

Bir dosyayı kopyalamak veya taşımak için iki File nesnesi ayarlarsınız. Biri kopyalanacak veya taşınacak olan dosyaya

işaret eder, bu copy veya move yöntemini çağıran nesnedir; diğeri hedef (sonuç) yoluna işaret eder.

Aşağıdaki örnek bir test.txt dosyasını kullanıcı documents dizininin AIR Test alt dizininden aynı dizindeki copy.txt

adlı dosyaya taşır:

var original:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var newFile:File = File.resolvePath("AIR Test/copy.txt"); original.copyTo(newFile, true);

Bu örnekte copyTo() yönteminin overwrite parametresinin (ikinci parametre) değeri true olarak ayarlıdır. Bu

değeri true olarak ayarlayarak var olan bir hedef dosyanın üzerine yazılır. Bu parametre isteğe bağlıdır. Bu değeri

false (varsayılan değer) olarak ayarlarsanız, hedef dosya mevcutsa işlem bir IOErrorEvent olayı gönderir (ve dosya

kopyalanmaz).

copy ve move yöntemlerinin “Senkronize olmayan” sürümleri senkronize olmayan bir şekilde çalışır. Aşağıdaki kodda

olduğu gibi, görev veya hata durumlarının tamamlanmasını izlemek için addEventListener() yöntemini kullanın:

extension Son noktanın (".") arkasından gelen (noktayı içermeyen) adın bir parçası olan dosya uzantısı. Dosya adında nokta

yoksa, uzantı null değerine sahiptir.

icon Dosya için tanımlanan simgeleri içeren bir Icon nesnesi.

isDirectory File nesnesi başvurusunun bir dizine yönelik olup olmadığı.

modificationDate Yerel diskteki dosyanın veya dizinin son değiştirilme tarihi.

name Yerel diskteki dosyanın veya dizinin adı (varsa dosya uzantısını da içeren).

nativePath Ana bilgisayar işletim sistemi temsilcisindeki tam yol. Bkz. “File nesnelerinin Yolları” sayfa 98.

parent File nesnesi tarafından temsil edilen klasörü veya dosyayı içeren klasör. File nesnesi dosya sisteminin kökündeki bir

dosyaya veya dizine başvuruyorsa, bu özellik null değerindedir.

size Yerel diskteki dosyanın bayt olarak boyutu.

type Geçersiz—extension özelliğini kullanın. (Macintosh'ta bu özellik dört karakterli dosya türüdür, bu tür yalnızca

Mac OS X'ten önceki Mac OS sürümlerinde kullanılır.)

url Dosyanın veya dizinin URL'si. Bkz. “File nesnelerinin Yolları” sayfa 98.

Dosya özelliği Açıklama

Page 117: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

110ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

var original = File.documentsDirectory; original = original.resolvePath("AIR Test/test.txt"); var destination:File = File.documentsDirectory; destination = destination.resolvePath("AIR Test 2/copy.txt"); original.addEventListener(Event.COMPLETE, fileMoveCompleteHandler); original.addEventListener(IOErrorEvent.IO_ERROR, fileMoveIOErrorEventHandler); original.moveToAsync(destination); function fileMoveCompleteHandler(event:Event):void { trace(event.target); // [object File] } function fileMoveIOErrorEventHandler(event:IOErrorEvent):void { trace("I/O Error."); }

File sınıfı ayrıca File.moveToTrash() ve File.moveToTrashAsync() yöntemlerini de içerir, bu yöntemler bir

dosyayı veya dizini sistem çöp kutusuna taşır.

Bir dosyayı silme

File sınıfı bir deleteFile() ve bir deleteFileAsync() yöntemi içerir. İlki senkronize, ikincisi senkronize olmayan

bir şekilde çalışan bu yöntemler dosyaları siler (bkz. “AIR dosyası temel bilgileri” sayfa 97).

Örneğin aşağıdaki kod kullanıcının documents dizinindeki test.txt dosyasını senkronize olarak siler:

var file:File = File.documentsDirectory.resolvePath("test.txt"); file.deleteFile();

Aşağıdaki kod kullanıcının documents dizininin test.txt dosyasını senkronize olmayan bir şekilde siler:

var file:File = File.documentsDirectory.resolvePath("test.txt"); file.addEventListener(Event.COMPLETE, completeHandler) file.deleteFileAsync(); function completeHandler(event:Event):void { trace("Deleted.") }

Ayrıca, bir dosyayı veya dizini Sistem çöp kutusuna taşımak için kullanabileceğiniz moveToTrash() ve

moveToTrashAsync() yöntemleri de bulunmaktadır. Ayrıntılar için bkz. “Bir dosyayı çöp kutusuna taşıma” sayfa 110.

Bir dosyayı çöp kutusuna taşıma

File sınıfı bir moveToTrash() ve bir moveToTrashAsync() yöntemi içerir. Bu yöntemler bir dosyayı veya dizini Sistem

çöp kutusuna gönderir, ilki senkronize, ikincisi senkronize olmayan bir şekilde çalışır (bkz. “AIR dosyası temel

bilgileri” sayfa 97).

Örneğin aşağıdaki kod kullanıcının documents dizinindeki test.txt dosyasını senkronize olarak Sistem çöp kutusuna

gönderir:

var file:File = File.documentsDirectory.resolvePath("test.txt"); file.moveToTrash();

Page 118: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

111ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Geçici bir dosya oluşturma

File sınıfı, aşağıdaki örnekte olduğu gibi Sistem için geçici bir dizin klasöründe bir dosya oluşturan

createTempFile() yöntemini içerir.

var temp:File = File.createTempFile();

createTempFile() yöntemi otomatik olarak benzersiz bir geçici dosya oluşturur (yeni bir benzersiz konum

belirlemekle uğraşmamış olursunuz).

Geçici bir dosyayı, bir uygulama oturumu için kullanılan bilgileri geçici olarak saklamak için kullanabilirsiniz. Ayrıca

Sistem geçici dizininde benzersiz geçici bir dizin oluşturmak için createTempDirectory() yönteminin

bulunduğunu unutmayın.

Otomatik olarak silinmediği için, uygulamayı kapamadan önce geçici dosyayı silmek isteyebilirsiniz.

Dosyaları okuma ve dosyalara yazma

FileStream sınıfı sayesinde AIR uygulamaları dosya sistemine okuyabilir ve yazabilir.

Dosyaları okuma ve dosyalara yazma için iş akışı

Dosyaları okuma ve dosyalara yazma için iş akışı şu şekildedir.

Yola işaret eden bir File nesnesini başlatın.

Bu, birlikte çalışmak istediğiniz dosyanın (veya daha sonra oluşturacağınız dosyanın) yoludur.

var file:File = File.documentsDirectory; file = file.resolvePath("AIR Test/testFile.txt");

Bu örnek File nesnesini başlatmak için File nesnesinin File.documentsDirectory özelliğini ve resolvePath()

yöntemini kullanır. Ancak bir File nesnesini bir dosyaya işaret etmenin başka birçok yolu vardır. Daha fazla bilgi için

bkz. “File nesnesini bir dosyaya işaret etme” sayfa 101.

Bir FileStream nesnesini başlatın.

FileStream nesnesinin open() veya openAsync() yöntemini çağırın.

Çağırdığınız yöntem, dosyayı senkronize işlemler için mi, senkronize olmayan işlemler için mi açmak istediğinize

bağlı olarak değişir. File nesnesini open yönteminin file parametresi olarak kullanın. fileMode parametresi için,

FileMode sınıfından dosyayı kullanma şeklinizi belirten bir sabit belirtin.

Örneğin aşağıdaki kod bir dosya oluşturmak ve var olan verilerin üzerine yazmak için kullanılan bir FileStream nesnesi

başlatır:

var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.WRITE);

Daha fazla bilgi için bkz. “Bir FileStream nesnesi başlatma ve dosyaları açma ve kapama” sayfa 113 ve “FileStream açma

modları” sayfa 112.

Page 119: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

112ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Dosyayı senkronize olmayan bir şekilde açtıysanız (openAsync() yöntemini kullanarak), FileStream nesnesi için olay dinleyicileri oluşturun ve ekleyin.

Bu olay dinleyicisi yöntemleri FileStream nesnesi tarafından, verilerin dosyadan okunması, G/Ç hatalarıyla

karşılaşılması veya yazılacak verilerin tamamının yazılması gibi çeşitli durumlarda gönderilen olaylara yanıt verir.

Ayrıntılar için bkz. “Senkronize olmayan bir şekilde açılan FileStream nesnesi tarafından oluşturulan olaylar ve

senkronize olmayan programlama” sayfa 117.

Verileri okuma ve yazma için kodu gerektiği şekilde dahil etme

FileStream sınıfının okuma ve yazmayla ilgili birçok yöntemi vardır. (Her biri "read" veya "write" ifadesiyle başlar.)

Veri okumak veya yazmak için kullanmayı seçtiğiniz yöntem, hedef dosyadaki verilerin formatına bağlıdır.

Örneğin hedef dosyadaki veriler UTF kodlu metinse, readUTFBytes() ve writeUTFBytes() yöntemlerini

kullanabilirsiniz. Verileri bayt dizileri olarak işlemek istiyorsanız, readByte(), readBytes(), writeByte() ve

writeBytes() yöntemlerini kullanabilirsiniz. Ayrıntılar için bkz. “Veri formatları ve kullanılacak okuma ve yazma

yöntemlerini seçme” sayfa 117.

Dosyayı senkronize olmayan bir şekilde açtıysanız, bir read yöntemini çağırmadan önce yeterli verinin kullanılabilir

olduğundan emin olun. Ayrıntılar için bkz. “FileStream nesnesinin okuma arabelleği ve bytesAvailable özelliği”

sayfa 115.

Bir dosyaya yazmadan önce kullanılabilir disk alanını kontrol etmek istiyorsanız, File nesnesinin spaceAvailable

özelliğini kontrol edebilirsiniz. Daha fazla bilgi için bkz. “Bir birimdeki kullanılabilir alanı belirleme” sayfa 105.

Dosyayla çalışmanız bittiğinde FileStream nesnesinin close() yöntemini çağırın.

Böylece dosya diğer uygulamalar tarafından kullanılabilir hale gelir.

Ayrıntılar için bkz. “Bir FileStream nesnesi başlatma ve dosyaları açma ve kapama” sayfa 113.

Dosyaları okumak ve yazmak için FileStream sınıfı kullanan örnek bir uygulama görmek için, Adobe AIR Geliştirici

Merkezi'ndeki şu makalelere bakın:

• Metin dosyası düzenleyicisi oluşturma

FileStream nesneleriyle çalışma

FileStream sınıfı dosyaları açmak, okumak ve yazmak için yöntemler tanımlar.

FileStream açma modları

FileStream nesnesinin open() ve openAsync() yöntemlerinin her biri bir fileMode parametresi içerir, bu parametre

bir dosya akışı için, aşağıdakiler de dahil olmak üzere bazı özellikler tanımlar:

• Dosyadan okuma özelliği

• Dosyaya yazma özelliği

• Verilerin her zaman dosyanın sonuna eklenip eklenmeyeceği (yazarken)

• Dosya yoksa ne yapılacağı (üst dizinleri de olmadığında)

Aşağıda çeşitli dosya modları verilmiştir (open() ve openAsync() yöntemlerinin fileMode parametresi olarak

belirtebileceğiniz):

Page 120: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

113ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Bir FileStream nesnesi başlatma ve dosyaları açma ve kapama

Bir FileStream nesnesini açtığınızda, nesneyi bir dosyaya veri okumak ve yazmak için kullanılabilir hale getirirsiniz.

FileStream nesnesini, FileStream nesnesinin open() veya openAsync() yöntemine File nesnesini ileterek açarsınız:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.open(myFile, FileMode.READ);

fileMode parametresi (open() ve openAsync() yöntemlerinin ikinci parametresi), dosyanın açılacağı modu belirtir:

okuma, yazma, ekleme veya güncelleme için. Ayrıntılar için önceki bölümlerden “FileStream açma modları” sayfa 112

bölümüne bakın.

openAsync() yöntemini dosyayı senkronize olmayan dosya işlemleri için açmak üzere kullanırsanız, senkronize

olmayan olayları işlemek için olay dinleyicileri ayarlayın:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(Event.COMPLETE, completeHandler); myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler); myFileStream.addEventListener(IOErrorEvent.IOError, errorHandler); myFileStream.open(myFile, FileMode.READ); function completeHandler(event:Event):void { // ... } function progressHandler(event:ProgressEvent):void { // ... } function errorHandler(event:IOErrorEvent):void { // ... }

Dosya, open() veya openAsync() yöntemlerinden hangisini kullandığınıza bağlı olarak senkronize veya senkronize

olmayan işlemler için açılır. Ayrıntılar için bkz. “AIR dosyası temel bilgileri” sayfa 97.

fileMode parametresini FileStream nesnesinin open yönteminde FileMode.READ veya FileMode.UPDATE olarak

ayarlarsanız, siz FileStream nesnesini açar açmaz veriler okuma arabelleğine okunur. Ayrıntılar için bkz. “FileStream

nesnesinin okuma arabelleği ve bytesAvailable özelliği” sayfa 115.

İlişkilendirilen dosyayı kapatmak için FileStream nesnesinin close() yöntemini çağırabilirsiniz, böylece dosyayı

diğer uygulamalar tarafından kullanılabilir hale getirirsiniz.

Dosya modu Açıklama

FileMode.READ Dosyanın yalnızca okuma için açık olduğunu belirtir.

FileMode.WRITE Dosyanın yalnızca yazma için açık olduğunu belirtir. Dosya yoksa, FileStream nesnesi açıldığında oluşturulur. Dosya

varsa, var olan tüm veriler silinir.

FileMode.APPEND Dosyanın yalnızca ekleme için açık olduğunu belirtir. Dosya yoksa oluşturulur. Dosya varsa, var olan verilerin üzerine

yazılmaz ve tüm yazma işlemleri dosyanın sonundan başlar.

FileMode.UPDATE Dosyanın yalnızca okuma ve yazma için açık olduğunu belirtir. Dosya yoksa oluşturulur. Dosyaya rastgele

okuma/yazma erişimi için bu modu belirtin. Dosyadaki herhangi bir konumdan okuma işlemi gerçekleştirebilirsiniz

ve dosyaya yazarken, yalnızca yazılan baytlar var olan baytların üzerine yazar (diğer baytlar değişmeden kalır).

Page 121: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

114ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

FileStream nesnesinin position özelliği

FileStream nesnesinin position özelliği, sonraki read veya write yönteminde verilerin nereye okunduğunu veya

yazıldığını belirler.

Bir okuma veya yazma işleminden önce, position özelliğini dosyada geçerli bir konuma ayarlayın.

Örneğin aşağıdaki kod "hello" dizesini (UTF kodlamada) dosyada konum 8'de yazar:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.open(myFile, FileMode.UPDATE); myFileStream.position = 8; myFileStream.writeUTFBytes("hello");

Bir FileStream nesnesini ilk açtığınızda, position özelliği 0'a ayarlıdır.

Bir okuma işleminden önce position değeri en az 0 ve dosyadaki bayt sayısından (dosyadaki var olan konumlar) az

olmalıdır.

position özelliğinin değeri yalnızca aşağıdaki durumlarda değiştirilir:

• position özelliğini açık olarak ayarladığınızda.

• Bir read yöntemini çağırdığınızda.

• Bir write yöntemini çağırdığınızda.

FileStream nesnesinin read veya write yöntemini çağırdığınızda, position özelliği hemen okuduğunuz veya

yazdığınız bayt sayısı kadar artırılır. Kullandığınız read yöntemine bağlı olarak, position özelliği okumak için

belirttiğiniz bayt sayısı kadar veya kullanılabilir bayt sayısı kadar artırılır. Bir read veya write yöntemini sonradan

çağırdığınızda, yeni konumdan başlayarak okur veya yazar.

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.open(myFile, FileMode.UPDATE); myFileStream.position = 4000; trace(myFileStream.position); // 4000 myFileStream.writeBytes(myByteArray, 0, 200); trace(myFileStream.position); // 4200

Ancak bir istisna söz konusudur: Ekleme modunda açılmış bir FileStream için, write yöntemine yapılan bir çağrıdan

sonra position özelliği değişmez. (Ekleme modunda veriler, position özelliğinin değerinden bağımsız olarak her

zaman dosyanın sonuna yazılır.)

Senkronize olmayan işlemler için açılan bir dosyada, kodun bir sonraki satırı çalıştırılmadan yazma işlemi

tamamlanmaz. Ancak birden çok senkronize olmayan yöntemi sıralı olarak çağırabilirsiniz ve çalışma zamanı onları

sırayla çalıştırır:

Page 122: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

115ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.openAsync(myFile, FileMode.WRITE); myFileStream.writeUTFBytes("hello"); myFileStream.writeUTFBytes("world"); myFileStream.addEventListener(Event.CLOSE, closeHandler); myFileStream.close(); trace("started."); closeHandler(event:Event):void { trace("finished."); }

Bu kod için izleme çıktısı şöyledir:

started. finished.

position değerini bir read veya write yöntemini çağırdıktan hemen sonra (veya istediğiniz zaman) belirtebilirsiniz,

böylece bir sonraki okuma veya yazma işlemi o konumdan başlar. Örneğin, aşağıdaki kod position özelliğini

writeBytes() işlemine bir çağrı yapıldıktan hemen sonra ayarlar ve yazma işlemi tamamlandıktan sonra bile

position o değere ayarlanır (300):

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.openAsync(myFile, FileMode.UPDATE); myFileStream.position = 4000; trace(myFileStream.position); // 4000 myFileStream.writeBytes(myByteArray, 0, 200); myFileStream.position = 300; trace(myFileStream.position); // 300

FileStream nesnesinin okuma arabelleği ve bytesAvailable özelliği

Okuma özelliklerine sahip bir FileStream nesnesi (open() veya openAsync() yönteminin fileMode parametresinin

READ veya UPDATE olarak ayarlı olduğu) açıldığında çalışma zamanı, verileri dahili bir arabellekte saklar. FileStream

nesnesi, siz dosyayı açar açmaz (FileStream nesnesinin open() veya openAsync() yöntemini çağırarak) verileri

arabelleğe okumaya başlar.

Aşağıdaki kodda gösterildiği gibi (dosyanın en az 100 bayttan oluştuğunu varsayar), senkronize işlemler için açılan bir

dosyada (open() yöntemi kullanılarak), position işaretçisini herhangi bir geçerli konuma ayarlayabilirsiniz

(dosyanın sınırları içinde) ve herhangi bir miktardaki veriyi okumaya başlayabilirsiniz (dosyanın sınırları içinde):

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.open(myFile, FileMode.READ); myFileStream.position = 10; myFileStream.readBytes(myByteArray, 0, 20); myFileStream.position = 89; myFileStream.readBytes(myByteArray, 0, 10);

Read yöntemleri, bir dosyanın senkronize veya senkronize olmayan işlemler için açıldığına bakılmaksızın, okuma

işlemini her zaman bytesAvalable özelliği tarafından temsil edilen "kullanılabilir" baytlardan gerçekleştirir.

Senkronize olarak okurken, dosyadaki tüm baytlar her zaman kullanılabilirdir. Senkronize olmayan bir şekilde okuma

yaparken, progress olayları tarafından bildirilen senkronize olmayan arabellek dolumları dizisinde, baytlar,

position özelliği tarafından belirtilen konumdan başlayarak kullanılabilir olur.

Page 123: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

116ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Senkronize işlemler için açılan dosyalarda, bytesAvailable özelliği her zaman position özelliğinden dosyanın

sonuna kadar olan bayt sayısını temsil edecek şekilde ayarlıdır (dosyadaki tüm baytlar her zaman okunabilir).

Senkronize olmayan işlemler için açılan dosyalarda, okuma arabelleğinin bir read yöntemini çağırmadan önce yeterli

veri tüketmiş olduğundan emin olmanız gerekir. Senkronize olmayan bir şekilde açılmış bir dosyada, okuma işlemi

ilerledikçe, dosyadaki veriler okuma işlemi başlatıldığında belirtilen position öğesinden başlayarak arabelleğe eklenir

ve okunan her baytla bytesAvailable özelliği artar. bytesAvailable özelliği, position özelliği tarafından belirtilen

konumdaki baytla başlayarak arabelleğin sonuna kadar kullanılabilir olan baytların sayısını gösterir. FileStream

nesnesi düzenli aralıklarla bir progress olayı gönderir.

Senkronize olmayan bir şekilde açılan dosyada, veriler okuma arabelleğinde kullanılabilir oldukça, FileStream nesnesi

düzenli aralıklarla progress olayını gönderir. Örneğin aşağıdaki kod, arabelleğe okundukça verileri bytes adlı bir

ByteArray nesnesine okur:

var bytes:ByteArray = new ByteArray(); var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler); myFileStream.openAsync(myFile, FileMode.READ); function progressHandler(event:ProgressEvent):void { myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable); }

Senkronize olmayan bir şekilde açılan dosyada, yalnızca okuma arabelleğindeki veriler okunabilir. Ayrıca siz verileri

okudukça, veriler okuma arabelleğinden kaldırılır. Okuma işlemleri için, okuma işlemini çağırmadan önce verilerin

okuma arabelleğinde bulunduğundan emin olmanız gerekir. Örneğin aşağıdaki kod, dosyada konum 4000'den

başlayarak 8000 bayt veri okur:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler); myFileStream.addEventListener(Event.COMPLETE, completed); myFileStream.openAsync(myFile, FileMode.READ); myFileStream.position = 4000; var str:String = ""; function progressHandler(event:Event):void { if (myFileStream.bytesAvailable > 8000 ) { str += myFileStream.readMultiByte(8000, "iso-8859-1"); } }

FileStream nesnesi bir yazma işlemi boyunca verileri okuma arabelleğine okumaz. Bir yazma işlemi tamamlandığında

(yazma arabelleğindeki tüm veriler dosyaya yazılır), FileStream nesnesi yeni bir okuma arabelleğine başlar

(ilişkilendirilen FileStream nesnesinin okuma özellikleriyle açıldığı varsayılarak) ve position özelliği tarafından

belirtilen konumdan başlayarak okuma arabelleğine veri okumaya başlar. position özelliği yazılan son baytın

konumu veya kullanıcı yazma işleminden sonra position nesnesi için farklı bir değer belirtirse farklı bir konum

olabilir.

Page 124: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

117ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Senkronize olmayan bir şekilde açılan FileStream nesnesi tarafından oluşturulan olaylar ve senkronize olmayan programlama

Bir dosya senkronize olmayan bir şekilde açıldığında (openAsync() yöntemi kullanılarak), dosyaları okuma ve yazma

işlemi senkronize olmayan bir şekilde gerçekleştirilir. Veriler okuma arabelleğine okunduğu ve çıktı verileri yazıldığı

için, diğer ActionScript kodu çalıştırılabilir.

Bu, FileStream nesnesi tarafından oluşturulan senkronize olmayan bir şekilde açılan olaylar için kaydolmanız gerektiği

anlamına gelir.

Aşağıdaki kodda olduğu gibi, progress olayı için kaydolduğunuzda yeni veriler okuma işlemi için kullanılabilir

olduğunda size bilgi verilebilir:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler); myFileStream.openAsync(myFile, FileMode.READ); var str:String = ""; function progressHandler(event:ProgressEvent):void { str += myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1"); }

Aşağıdaki kodda olduğu gibi complete olayı için kaydolarak tüm verileri okuyabilirsiniz:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(Event.COMPLETE, completed); myFileStream.openAsync(myFile, FileMode.READ); var str:String = ""; function completeHandler(event:Event):void { str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1"); }

Senkronize olmayan okuma işleminin gerçekleşmesi için giriş verilerinin arabelleğe alınma şekline oldukça benzer bir

şekilde, senkronize olmayan bir akışa yazdığınız veriler arabelleğe alınır ve dosyaya senkronize olmayan bir şekilde

yazılır. Veriler bir dosyaya yazıldıkça, FileStream nesnesi düzenli aralıklarla bir OutputProgressEvent nesnesi

gönderir. OutputProgressEvent nesnesi, yazılmak için kalan bayt sayısına ayarlı bir bytesPending özelliği içerir.

Belki de bir ilerleme iletişim kutusu görüntülemek için bu arabellek gerçekten bir dosyaya yazıldığı için,

outputProgress olayı için bilgi almak üzere kaydolabilirsiniz. Ancak genelde bunu yapmanıza gerek yoktur.

Özellikle, yazılmamış baytları dikkate almadan close() yöntemini çağırabilirsiniz. FileStream nesnesi veri yazmaya

devam eder ve son bayt dosyaya yazıldıktan ve alttaki dosya kapatıldıktan sonra close olayı iletilir.

Veri formatları ve kullanılacak okuma ve yazma yöntemlerini seçme

Her dosya diskteki bir bayt kümesidir. ActionScript'te bir dosyadan gelen veriler her zaman bir ByteArray olarak

temsil edilebilir. Örneğin aşağıdaki kod verileri bir dosyadan bytes adlı bir ByteArray nesnesine okur:

Page 125: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

118ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(Event.COMPLETE, completeHandler); myFileStream.openAsync(myFile, FileMode.READ); var bytes:ByteArray = new ByteArray(); function completeHandler(event:Event):void { myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable); }

Benzer şekilde aşağıdaki kod verileri bytes adlı bir ByteArray nesnesinden bir dosyaya yazar:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.open(myFile, FileMode.WRITE); myFileStream.writeBytes(bytes, 0, bytes.length);

Ancak genellikle verileri bir ActionScript ByteArray nesnesinde saklamak istemezsiniz. Genellikle veri dosyası

belirtilen dosya formatındadır.

Örneğin dosyadaki veriler metin dosyası formatında olabilir ve bu tür verileri bir String nesnesinde temsil etmek

isteyebilirsiniz.

Bu nedenle FileStream sınıfı, ByteArray nesnelerinin dışındaki türlere ve türlerden yapılacak veri okuma ve yazma

işlemleri için read ve write yöntemleri içerir. Örneğin readMultiByte() yöntemi sayesinde, aşağıdaki kodda olduğu

gibi verileri bir dosyadan okuyup bir dizede saklayabilirsiniz:

var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt"); var myFileStream:FileStream = new FileStream(); myFileStream.addEventListener(Event.COMPLETE, completed); myFileStream.openAsync(myFile, FileMode.READ); var str:String = ""; function completeHandler(event:Event):void { str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1"); }

readMultiByte() yönteminin ikinci parametresi, ActionScript'in verileri yorumlamak için kullandığı metin

formatını belirtir (örnekte "iso-8859-1"). ActionScript ortak karakter kümesi kodlamalarını destekler ve bunlar

ActionScript 3.0 Dil Başvurusu bölümünde listelenmiştir (bkz.

http://livedocs.macromedia.com/flex/2/langref/charset-codes.html adresinde Supported character setsupported

character sets (Desteklenen Karakter Setleri)).

FileStream sınıfı ayrıca readUTFBytes() yöntemini de içerir, bu yöntem UTF-8 karakter kümesini kullanarak okuma

arabelleğinden verileri bir dizeye okur. UTF-8 karakter kümesindeki karakterler çeşitli uzunluklarda olduğu için,

readUTFBytes() öğesini progress olayına yanıt veren bir yöntemde kullanmayın, okuma arabelleğinin sonundaki

veriler eksik bir karakteri temsil edebilir. (Bu ayrıca readMultiByte() yöntemini çeşitli uzunluklardaki karakter

kodlamasıyla kullanırken de geçerlidir.) Bu nedenle FileStream nesnesi complete olayını gönderdiğinde veri

kümesinin tamamını okuyun.

Ayrıca String nesneleriyle ve metin dosyalarıyla çalışmak için, writeMultiByte() ve writeUTFBytes() gibi benzer

write yöntemleri de vardır.

Page 126: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

119ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

readUTF() ve writeUTF() yöntemleri de (readUTFBytes() ve writeUTFBytes() yöntemleriyle karıştırılmamalıdır)

metin verilerini bir dosyaya okur ve yazar, ancak onlar metin verilerinden önce, metin verilerinin uzunluğunu belirten

verilerin geldiğini varsayar, bu da standart metin dosyaları için yaygın bir uygulama değildir.

Bazı UTF kodlu metin dosyaları "UTF-BOM" (bayt sırası işareti) karakteriyle başlar, bu karakter kodlama formatının

yanı sıra endian olduğunu belirtir ( UTF-16 veya UTF-32 gibi).

Bir dosyaya okuma ve yazma örneği için bkz. “Örnek: Bir XML dosyasını XML nesnesine okuma” sayfa 119.

readObject() ve writeObject(), karmaşık ActionScript nesneleri için veri saklamak ve almak için pratik yollardır.

Veriler AMF'de kodlanmıştır (ActionScript Message Format). Bu format ActionScript'e aittir. AIR, Flash Player, Flash

Media Server ve Flex Data Services dışındaki uygulamalarda, bu formattaki verilerle çalışmayı sağlayacak dahili API'ler

bulunmamaktadır.

Başka read ve write yöntemleri (readDouble() ve writeDouble() gibi) vardır. Ancak bunları kullanırsanız, dosya

formatının bu yöntemler tarafından tanımlanan verilerin formatlarıyla eşleştiğinden emin olun.

Dosya formatları genellikle basit metin formatlarından daha karmaşıktır. Örneğin bir MP3 dosyası, yalnızca belirli

MP3 dosyalarına özgü olan açma ve kod çözme algoritmalarıyla yorumlanabilen sıkıştırılmış veriler içerir. MP3

dosyaları ayrıca dosya hakkında meta etiket bilgileri içeren ID3 etiketleri içerebilir (şarkının ve sanatçının adı gibi).

ID3 formatının birden çok sürümü vardır, ancak bunlardan en basiti (ID3 sürüm 1) “Örnek: Rastgele erişimle veri

okuma ve yazma” sayfa 120 bölümünde anlatılmaktadır.

Diğer dosya formatları (görüntüler, veri tabanları, uygulama belgeleri, vb.) farklı yapılara sahiptir ve ActionScript'te

onların verileriyle çalışmak için, verilerin nasıl yapılandırıldığını anlamanız gerekir.

Örnek: Bir XML dosyasını XML nesnesine okuma

Aşağıdaki örnekler, XML verileri içeren bir metin dosyasına okuma ve yazma işlemlerinin nasıl yapılacağını gösterir.

Dosyadan okumak için, File ve FileStream nesnelerini başlatın, FileStream nesnesinin readUTFBytes() yöntemini

çağırın ve dizeyi bir XML nesnesine dönüştürün:

var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml"); var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.READ); var prefsXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable)); fileStream.close();

Benzer şekilde dosyaya veri yazmak da, uygun File ve FileStream nesnelerini ayarlayıp FileStream nesnesinin write

yöntemini çağırmak kadar kolaydır. XML verilerinin dize sürümünü write yöntemine aşağıdaki kodda olduğu gibi

iletin:

var prefsXML:XML = <prefs><autoSave>true</autoSave></prefs>; var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml"); fileStream = new FileStream(); fileStream.open(file, FileMode.WRITE); var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n'; outputString += prefsXML.toXMLString(); fileStream.writeUTFBytes(outputString); fileStream.close();

Page 127: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

120ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

Bu örnekler readUTFBytes() ve writeUTFBytes() yöntemlerini kullanır, çünkü dosyaların UTF-8 formatında

olduğunu varsayar. Değilse, farklı bir yöntem kullanmanız gerekebilir (bkz. “Veri formatları ve kullanılacak okuma ve

yazma yöntemlerini seçme” sayfa 117).

Önceki örnekler senkronize işlem için açılmış FileStream nesnelerini kullanır. Senkronize olmayan işlemler (olaylara

yanıt vermek için olay dinleyicisi işlevlerine dayanan) için de dosyalar açabilirsiniz. Örneğin aşağıdaki kod, bir XML

dosyasının senkronize olmayan şekilde nasıl okunacağını gösterir:

var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml"); var fileStream:FileStream = new FileStream(); fileStream.addEventListener(Event.COMPLETE, processXMLData); fileStream.openAsync(file, FileMode.READ); var prefsXML:XML; function processXMLData(event:Event):void { prefsXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable)); fileStream.close(); }

processXMLData() yöntemi, dosyanın tamamı okuma arabelleğine okunduğu zaman çağrılır (FileStream nesnesi

complete olayını gönderdiğinde). Okunan verilerin dize sürümünü alması için readUTFBytes() yöntemini çağırır

ve o dizeye dayalı olarak prefsXML adlı bir XML nesnesi oluşturur.

Örnek: Rastgele erişimle veri okuma ve yazma

MP3 dosyaları, kaydı tanımlayan meta verileri içeren dosyanın başındaki veya sonundaki bölümler olan ID3

etiketlerini içerebilir. ID3 etiket formatının farklı sürümleri vardır. Bu örnek, en basit ID3 formatını içeren (ID3 sürüm

1.0) MP3 dosyasından, dosyadaki rastgele konumlara okuma ve yazma işleminin gerçekleştirildiği anlamına gelen

"dosya verilerine rastgele erişim" kullanılarak nasıl veri okunacağını ve yazılacağını gösterir.

ID3 sürüm 1 etiketini içeren bir MP3 dosyası, ID3 verilerini dosyanın sonunda, son 128 baytta içerir.

Bir dosyaya rastgele okuma/yazma erişimi için erişirken, open() veya openAsync() yönteminin fileMode

parametresi olarak FileMode.UPDATE öğesini belirtmek gerekir:

var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3"); var fileStr:FileStream = new FileStream(); fileStr.open(file, FileMode.UPDATE);

Böylece dosyaya hem okur hem de yazarsınız.

Dosyayı açtıktan sonra, position işaretçisini, dosyanın sonundan 128 bayt önce konumuna getirebilirsiniz:

fileStr.position = file.size - 128;

Bu kod position özelliğini dosyada bu konuma ayarlar, çünkü ID3 v1.0 formatı, ID3 etiket verilerinin dosyanın son

128 baytında saklandığını belirtir. Bu belirtim ayrıca şunu da gösterir:

• Etiketin ilk 3 baytı "TAG" dizesini içerir.

• Sonraki 30 karakter, bir dize olarak MP3 parçasının başlığını içerir.

• Sonraki 30 karakter, bir dize olarak sanatçının adını içerir.

• Sonraki 30 karakter, bir dize olarak albümün adını içerir.

• Sonraki 4 karakter, bir dize olarak yılı içerir.

Page 128: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

121ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dosya sistemiyle çalışma

• Sonraki 30 karakter, bir dize olarak yorumu içerir.

• Sonraki bayt, parçanın türünü belirten bir kod içerir.

• Tüm metin verileri ISO 8859-1 formatındadır.

id3TagRead() yöntemi, okunduktan sonra verileri kontrol eder (complete olayından sonra):

function id3TagRead():void { if (fileStr.readMultiByte(3, "iso-8859-1").match(/tag/i)) { var id3Title:String = fileStr.readMultiByte(30, "iso-8859-1"); var id3Artist:String = fileStr.readMultiByte(30, "iso-8859-1"); var id3Album:String = fileStr.readMultiByte(30, "iso-8859-1"); var id3Year:String = fileStr.readMultiByte(4, "iso-8859-1"); var id3Comment:String = fileStr.readMultiByte(30, "iso-8859-1"); var id3GenreCode:String = fileStr.readByte().toString(10); } }

Ayrıca dosyada rastgele erişimli yazma işlemi de gerçekleştirebilirsiniz. Örneğin id3Title değişkenini baş harfinin

doğru şekilde büyütüldüğünden emin olmak için ayrıştırabilirsiniz (String sınıfının yöntemlerini kullanarak) ve

ardından aşağıdaki gibi, dosyaya newTitle adlı değiştirilmiş bir dize yazabilirsiniz:

fileStr.position = file.length - 125; // 128 - 3 fileStr.writeMultiByte(newTitle, "iso-8859-1");

ID3 sürüm 1 standardına uymak için, newTitle dizesinin uzunluğu, sonunda karakter kodu 0 ile tamponlu 30

karakter olmalıdır (String.fromCharCode(0)).

Page 129: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

122

Bölüm 15: Sürükle ve bırak

Kullanıcı arabirimi sürükle ve bırak hareketlerini desteklemek için, sürükle ve bırak API'sindeki sınıfları kullanın. Bu

anlamda hareket kullanıcı tarafından gerçekleştirilen, hem işletim sistemi hem de uygulamanız tarafından aracı

olunan, bilgi kopyalamak, taşımak veya link vermek için bir amaç ifade eden bir eylemdir. Dışarı sürükleme hareketi,

kullanıcı bir nesneyi bileşenin veya uygulamanın dışına sürüklediğinde oluşur. Dışarı sürükleme hareketi, kullanıcı bir

nesneyi bileşenin veya uygulamanın dışından içeri sürüklediğinde oluşur.

Sürükle ve bırak API'siyle kullanıcının uygulamalar arasında ve bir uygulama içerisindeki bileşenler arasında veri

sürüklemesini sağlayabilirsiniz. Desteklenen aktarım formatları şunlardır:

• Bitmapler

• Dosyalar

• HTML formatlı metin

• Metin

• Zengin Metin Formatlı veriler

• URL'ler

• Serileştirilmiş nesneler

• Nesne başvuruları (yalnızca kaynak uygulama içinde geçerli)

Sürükleme ve bırakma hakkında ek çevrimiçi bilgiler

Sürükle ve bırak API'siyle çalışma hakkında daha fazla bilgi için şu kaynaklardan yararlanabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• Sürükle ve bırak ve kopyala ve yapıştır işlemlerini destekleme

Dil Başvurusu

• NativeDragManager

• NativeDragOptions

• Clipboard

• NativeDragEvent

Adobe Geliştirici Bağlantısı Makaleler ve Örnekler

• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR sürükleme ve bırakma'yı arayın)

Sürükleme ve bırakma temel bilgileri

Sürükle ve bırak API'si aşağıdaki sınıfları içerir.

Page 130: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

123ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Sürükle ve bırak hareket sahneleri

Sürükle ve bırak hareketinin üç sahnesi vardır:

Başlatma Kullanıcı, fare düğmesini basılı tutarak bir bileşeni veya bileşendeki öğeyi sürükleyerek sürükle ve bırak

işlemini başlatır. Sürüklenen öğenin kaynağı olan bileşen genellikle sürükleme başlatıcısı olarak belirlenir ve

nativeDragStart ve nativeDragComplete olaylarını gönderir. Adobe® AIR™ uygulaması, mouseDown veya

mouseMove olayına yanıt olarak NativeDragManager.doDrag() yöntemini çağırarak bir sürükleme işlemi başlatır.

Sürükleme Fare düğmesini basılı tutarken kullanıcı fare imlecini başka bir bileşene, uygulamaya veya masaüstüne taşır.

AIR isteğe bağlı olarak sürükleme sırasında bir proxy görüntüsü görüntüler. Sürükleme işlemi devam ederken,

başlatıcı nesne nativeDragUpdate olaylarını gönderir. Kullanıcı fareyi AIR uygulamasındaki olası bir bırakma

hedefinin üzerine taşıdığında, bırakma hedefi bir nativeDragEnter olayı gönderir. Olay işleyicisi, sürüklenen

verilerin hedef tarafından kabul edilecek bir formatta mevcut olup olmadığını belirlemek için olay nesnesini

denetleyebilir, mevcutsa NativeDragManager.acceptDragDrop() yöntemini çağırarak kullanıcının verileri

bırakmasını sağlar.

Sürükleme hareketi etkileşimli bir nesnenin üzerinde kaldığı sürece, bu nesne nativeDragOver olaylarını gönderir.

Sürükleme hareketi etkileşimli nesneyi bıraktığında, bir nativeDragExit olayı gönderir.

Bırakma Kullanıcı fare düğmesini uygun bir bırakma hedefinin üzerinde serbest bırakır.Hedef bir AIR uygulaması veya

bileşeniyse, bileşen bir nativeDragDrop olayı gönderir. Olay işleyicisi olay nesnesinden aktarılan verilere erişebilir.

Hedef, AIR'in dışındaysa, bırakma işlemini işletim sistemi veya başka bir uygulama yapar. Her iki durumda da,

başlatan nesne bir nativeDragComplete olayı gönderir (sürükleme AIR'in içinden başlatıldıysa).

NativeDragManager sınıfı hem içeri hem de dışarı sürükleme hareketlerini kontrol eder. NativeDragManager sınıfının

tüm üyeleri statiktir, bu sınıfın bir örneğini oluşturmayın.

Clipboard nesnesi

Bir uygulamanın veya bileşenin içine ya da dışına sürüklenen veriler bir Clipboard nesnesinde bulunmaktadır. Tek bir

Clipboard nesnesi, başka bir uygulamanın verileri anlayıp kullanabilmesi olasılığını arttırmak için aynı bilgilerin farklı

temsillerini kullanılabilir hale getirebilir. Örneğin bir görüntü, görüntü verisi, serileştirilmiş Bitmap nesnesi veya bir

dosya olarak dahil edilebilir. Bir formatta veri oluşturma işlemi, veriler okunana kadar çağrılmayan bir oluşturma

işlevine ertelenebilir.

Paket Sınıflar

flash.desktop • NativeDragManager

• NativeDragOptions

• Clipboard

• NativeDragActions

• ClipboardFormat

• ClipboardTransferModes

Sürükle ve bırak API'siyle kullanılan sabitler aşağıdaki sınıflarda tanımlanır:

• NativeDragActions

• ClipboardFormat

• ClipboardTransferModes

flash.events NativeDragEvent

Page 131: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

124ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Bir sürükleme hareketi başladıktan sonra Clipboard nesnesine yalnızca nativeDragEnter, nativeDragOver ve

nativeDragDrop olayları için olay işleyicisinin içinden erişilebilir. Sürükleme hareketi bittikten sonra Clipboard

nesnesi okunamaz veya yeniden kullanılamaz.

Bir uygulama nesnesi başvuru olarak ve serileştirilmiş bir nesne olarak aktarılabilir. Başvurular yalnızca kaynak

uygulama içinde geçerlidir. Serileştirilmiş nesne aktarımları AIR uygulamaları arasında geçerlidir, ancak yalnızca

serileştirildiğinde ve serileştirmesi kaldırıldığında geçerliliği devam eden nesnelerle kullanılabilir. Serileştirilen

nesneler dize tabanlı veri aktarım formatı olan ActionScript 3 (AMF3) için Action Message Format'e dönüştürülür.

Flex çerçevesiyle çalışma

Çoğu durumda, Flex uygulamaları oluştururken Adobe® Flex™ sürükle ve bırak API'sini kullanmak daha yararlıdır.

AIR'de bir Flex uygulaması çalıştırıldığında (AIR NativeDragManager öğesini dahili şekilde kullanır), Flex çerçevesi

eşdeğer bir özellik kümesi sağlar. Flex ayrıca, bir uygulama veya bileşen daha kısıtlayıcı bir tarayıcı ortamında

çalışırken, daha sınırlı bir özellik setini korur. AIR sınıfları, AIR çalışma zamanı ortamının dışında çalışan bileşenlerde

veya uygulamalarda kullanılamaz.

Dışarı sürükleme hareketini destekleme

Dışarı sürükleme hareketini desteklemek için, mouseDown olayına yanıt olarak bir Clipboard nesnesi oluşturmalı ve

NativeDragManager.doDrag() yöntemine göndermelisiniz. Ardından uygulamanız, kullanıcı hareketi

tamamladığında veya iptal ettiğinde ne yapacağını belirlemek için başlatan nesnedeki nativeDragComplete olayını

dinleyebilir.

Verileri aktarım için hazırlama

Verileri veya bir nesneyi sürüklemeye hazırlamak için, bir Clipboard nesnesi oluşturun ve bir veya birden fazla

formatta aktarılacak bilgileri ekleyin. Otomatik olarak yerel pano formatlarına çevrilebilecek verileri iletmek için

standart veri formatlarını ve nesneleri iletmek için uygulama tanımlı formatları kullanabilirsiniz. Belirli bir formata

aktarılacak bilgileri dönüştürmek hesaplama yönünden pahalıysa, dönüştürmeyi gerçekleştirmesi için bir işleyici

işlevinin adını verebilirsiniz. Yalnızca alıcı bileşen veya uygulama ilişkilendirilen formatı okursa işlev çağrılır. Daha

fazla bilgi için bkz. “Pano veri formatları” sayfa 143.

Aşağıdaki örnek birçok formatta bitmap içeren bir Clipboard nesnesinin nasıl oluşturulacağını gösterir: bir Bitmap

nesnesi, bir yerel bitmap formatı ve bitmapin ilk yüklendiği dosyayı içeren bir dosya listesi formatı:

import flash.desktop.Clipboard; import flash.display.Bitmap; import flash.filesystem.File; public function createClipboard(image:Bitmap, sourceFile:File):Clipboard{ var transfer:Clipboard = new Clipboard(); transfer.setData("CUSTOM_BITMAP", image, true); //Flash object by value and by reference transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false); transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false); return transfer; }

Dışarı sürükleme işlemi başlatma

Bir sürükleme işlemi başlatmak için, mouse down olayına yanıt olarak NativeDragManager.doDrag() yöntemini

çağırın. doDrag() yöntemi, aşağıdaki parametreleri alan statik bir yöntemdir:

Page 132: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

125ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Aşağıdaki örnek bir dosyadan yüklenen bitmap nesnesi için sürükleme işleminin nasıl başlatılacağını anlatır. Örnek,

bir görüntü yükler ve bir mouseDown olayında sürükleme işlemini başlatır.

package { import flash.desktop.NativeDragManager; import mx.core.UIComponent; import flash.display.Sprite; import flash.display.Loader; import flash.system.LoaderContext; import flash.net.URLRequest; import flash.geom.Point; import flash.desktop.Clipboard; import flash.display.Bitmap; import flash.filesystem.File; import flash.events.Event; import flash.events.MouseEvent; public class DragOutExample extends UIComponent Sprite { protected var fileURL:String = "app:/image.jpg"; protected var display:Bitmap; private function init():void { loadImage(); } private function onMouseDown(event:MouseEvent):void { var bitmapFile:File = new File(fileURL); var transferObject:Clipboard = createClipboard(display, bitmapFile); NativeDragManager.doDrag(this, transferObject, display.bitmapData, new Point(-mouseX,-mouseY)); } public function createClipboard(image:Bitmap, sourceFile:File):Clipboard { var transfer:Clipboard = new Clipboard(); transfer.setData("bitmap", image, true);

Parametre Açıklama

initiator Sürükleme işleminin kaynaklandığı ve dragStart ve dragComplete olaylarını gönderen nesne. Başlatıcı

etkileşimli bir nesne olmalıdır.

clipboard Aktarılacak verileri içeren Clipboard nesnesi. Clipboard nesnesine, sürükleme ve bırakma sırası boyunca

gönderilen NativeDragEvent nesnelerinde başvurulur.

dragImage (İsteğe bağlı) Sürükleme sırasında görüntülenecek bir BitmapData nesnesi. Görüntü bir alpha değeri

belirtebilir. (Not: Microsoft Windows görüntüleri sürüklemek için her zaman sabit alfa soldurma uygular).

offset (İsteğe bağlı) Sürükleme görüntüsünün fare etkin noktasından uzaklığını belirten Point nesnesi. Sürükleme

görüntüsünü fare imlecine göre yukarı ve sola taşımak için negatif koordinatlar kullanın. Uzaklık

sağlanmamışsa, sürükleme görüntüsünün sol üst köşesi farenin etkin noktasında konumlandırılmıştır.

actionsAllowed (İsteğe bağlı) Sürükleme işlemi için hangi eylemlerin (kopyala, taşı veya bağla) geçerli olduğunu belirten bir

NativeDragOptions nesnesi. Hiç argüman sağlanmamışsa, tüm eylemlere izin verilir. Olası bir sürükleme

hedefinin izin verilen eylemlerin hedef bileşenin amacına uygun olup olmadığını kontrol etmesini sağlamak

için NativeDragEvent nesnelerinde DragOptions nesnesine başvurulur. Örneğin “trash” bileşeni yalnızca

taşıma eylemine izin veren sürükleme hareketlerini kabul edebilir.

Page 133: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

126ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

// ActionScript 3 Bitmap object by value and by reference transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false); // Standard BitmapData format transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false); // Standard file list format return transfer; } private function loadImage():void { var url:URLRequest = new URLRequest(fileURL); var loader:Loader = new Loader(); loader.load(url,new LoaderContext()); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); } private function onLoadComplete(event:Event):void { display = event.target.loader.content; var flexWrapper:UIComponent = new UIComponent(); flexWrapper.addChild(event.target.loader.content); addChild(flexWrapper); flexWrapper.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); } } }

Dışarı sürükleme aktarımını tamamlama

Kullanıcı sürüklenen öğeyi fare düğmesini serbest bırakarak bıraktığında, başlatıcı nesne bir nativeDragComplete

olayı gönderir. Olay nesnesinin dropAction özelliğini kontrol edip uygun eylemi gerçekleştirebilirsiniz. Örneğin

eylem NativeDragAction.MOVE, olduğunda, kaynak öğeyi orijinal konumundan kaldırabilirsiniz. Kullanıcı, imleç

uygun bir bırakma hedefinin dışındayken, fare düğmesini serbest bırakarak sürükleme hareketini iptal edebilir.

Sürükleme yöneticisi iptal edilmiş bir hareket için dropAction özelliğini NativeDragAction.NONE olarak ayarlar.

İçeri sürükleme hareketini destekleme

İçeri sürükleme hareketini desteklemek için, uygulamanız (genelde uygulamanızın görsel bir bileşeni)

nativeDragEnter veya nativeDragOver olaylarına yanıt vermelidir.

Genel bir bırakma işleminin adımları

Bırakma işlemi için tipik olay sırası aşağıdaki gibidir:

1 Kullanıcı clipboard nesnesini bir bileşenin üzerine sürükler.

2 Bileşen bir nativeDragEnter olayı gönderir.

3 nativeDragEnter olay işleyici, kullanılabilir veri formatlarını ve izin verilen eylemleri kontrol etmek için olay

nesnesini inceler. Bileşen bırakmayı işleyebilirse, NativeDragManager.acceptDragDrop() öğesini çağırır.

4 NativeDragManager fare imlecini, nesnenin bırakıldığını gösterecek şekilde değiştirir.

5 Kullanıcı nesneyi bileşenin üzerine bırakır.

Page 134: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

127ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

6 Alıcı bileşen bir nativeDragDrop olayı gönderir.

7 Alıcı bileşen, istenen formattaki verileri olay nesnesinin içindeki Clipboard nesnesinden okur.

8 Sürükleme hareketi bir AIR uygulamasının içinden kaynaklandıysa, başlatan etkileşimli nesne bir

nativeDragComplete olayı gönderir. Hareket AIR uygulamasının dışından kaynaklandıysa, geribildirim

gönderilmez.

Bir içeri sürükleme hareketini onaylama

Kullanıcı bir pano öğesini görsel bir bileşenin sınırlarının içine sürüklediğinde, bileşen nativeDragEnter ve

nativeDragOver olaylarını gönderir. Bileşenin pano öğesini kabul edip edemeyeceğini belirlemek için, bu olayların

işleyicileri, olay nesnesinin clipboard ve allowedActions özelliklerini kontrol edebilir. Olay işleyici, bileşenin

bırakma işlemini kabul edebileceğini bildirmek için alıcı bileşene bir başvuru ileterek

NativeDragManager.acceptDragDrop() yöntemini çağırmalıdır. Birden fazla kayıtlı olay dinleyicisi

acceptDragDrop() yöntemini çağırırsa, listedeki son işleyici önceliğe sahiptir. Fare kabul eden nesnenin

sınırlarından çıkıp nativeDragExit olayını tetikleyene kadar, acceptDragDrop() çağrısı geçerliliğini korur.

doDrag() öğesine iletilen allowedActions parametresinde birden fazla eyleme izin veriliyorsa, kullanıcı bir

değiştirici tuşunu basılı tutarak izin verilen eylemlerden hangilerini gerçekleştirmeyi düşündüğünü belirtebilir.

Sürükleme yöneticisi, kullanıcıya, bırakma işlemini tamamlasaydı hangi eylemin gerçekleşeceğini göstermek üzere

imleç görüntüsünü değiştirir. İstenen eylem, NativeDragEvent nesnesinin dropAction özelliği tarafından bildirilir.

Sürükleme hareketi için eylem kümesi yalnızca tavsiye amaçlıdır. Aktarımda yer alan bileşenlerin uygun davranışı

uygulaması gereklidir. Örneğin bir taşıma eylemini tamamlamak için, sürükleme başlatıcısı sürüklenen öğeyi

sürükleyebilir ve bırakma hedefi bunu ekleyebilir.

Sürükleme hedefiniz NativeDragManager sınıfının dropAction özelliğini ayarlayarak, sürükleme eylemini üç olası

eylemden biriyle sınırlayabilir. Kullanıcı klavyeyi kullanarak farklı bir eylem seçmeyi denerse, NativeDragManager

unavailable imleci görüntüler. Hem nativeDragEnter hem de nativeDragOver olayları için, işleyicilerdeki

dropAction özelliğini ayarlayın.

Aşağıdaki örnek, bir nativeDragEnter veya nativeDragOver olayı için olay işleyicisini gösterir. Sürüklenen pano

metin formatlı veriler içeriyorsa, bu işleyici yalnızca içeri sürükleme hareketini kabul eder.

import flash.desktop.NativeDragManager; import flash.events.NativeDragEvent; public function onDragIn(event:NativeDragEvent):void{ NativeDragManager.dropAction = NativeDragActions.MOVE; if(event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)){ NativeDragManager.acceptDragDrop(this); //'this' is the receiving component } }

Bırakmayı tamamlama

Kullanıcı sürüklenen öğeyi hareketi kabul eden etkileşimli bir nesnenin üzerine bıraktığında, etkileşimli nesne bir

nativeDragDrop olayı gönderir. Bu olayın işleyicisi verileri olay nesnesinin clipboard özelliğinden ayıklayabilir.

Pano uygulama tanımlı bir format içerdiğinde, Clipboard nesnesinin getData() yöntemine iletilen transferMode

parametresi sürükleme yöneticisinin bir başvuruyu mu, yoksa nesnenin serileştirilmiş bir sürümünü mü

döndürdüğünü belirler.

Aşağıdaki örnek nativeDragDrop olayı için bir olay işleyicisini gösterir:

Page 135: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

128ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

import flash.desktop.Clipboard; import flash.events.NativeDragEvent; public function onDrop(event:NativeDragEvent):void { if (event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)) { var text:String = String(event.clipboard.getData(ClipboardFormats.TEXT_FORMAT, ClipboardTransferMode.ORIGINAL_PREFERRED)); }

Olay işleyicisinden çıkıldıktan sonra, Clipboard nesnesi geçerliliğini kaybeder. Nesneye veya verilerine erişme girişimi,

hata oluşmasına neden olur.

Bir bileşenin görünümünü güncelleme

Bir bileşen görünümünü NativeDragEvent olaylarına dayalı olarak güncelleyebilir. Aşağıdaki tablo tipik bir bileşenin

farklı olaylara yanıt olarak yapacağı değişiklikleri açıklar:

İçeri sürükleme hareketi sırasında fare konumunu izleme

Sürükleme hareketi bir bileşenin üzerinde kaldığında, bu bileşen nativeDragOver olaylarını gönderir. Bu olaylar her

birkaç milisaniyede bir ve farenin her hareketinde gönderilir. nativeDragOver olay nesnesi, farenin bileşen

üzerindeki konumunu belirlemek için kullanılabilir. Fare konumuna erişimi olmak, alıcı bileşenin karmaşık olduğu,

ancak alt bileşenlerden oluşmadığı durumlarda yararlı olabilir. Örneğin, uygulamanız bir sokak haritası içeren bir

bitmap görüntülediyse ve kullanıcı içlerine bilgi sürüklediğinde haritadaki bölgelerin vurgulanmasını istediyseniz,

harita içinde fare konumunu izlemek için nativeDragOver olayında bildirilen fare koordinatlarını kullanabilirsiniz.

HTML Sürükle ve bırak

HTML tabanlı bir uygulamaya veya uygulamadan (veya bir HTMLLoader öğesinde görüntülenen HTML'e veya

HTML'den) veri sürüklemek için, HTML drag ve drop olaylarını kullanabilirsiniz. HTML sürükle ve bırak API'si

sayesinde HTML içeriğindeki DOM öğelerine ve bu öğelerden veri sürükleyebilirsiniz.

Olay Açıklama

nativeDragStart Başlatan etkileşimli nesne nativeDragStart olayını, sürükleme hareketinin bu etkileşimli nesneden

kaynaklandığına dair görsel geribildirim sağlamak için kullanabilir.

nativeDragUpdate Başlatan etkileşimli nesne, nativeDragUpdate olayını, hareket sırasında durumunu güncellemek için

kullanabilir.

nativeDragEnter Olası alıcı etkileşimli nesne bu olayı odağı kendine çekmek veya bırakma işlemini kabul edip edemeyeceğini

görsel olarak belirtmek için kullanabilir.

nativeDragOver Olası alıcı etkileşimli nesne bu olayı, farenin sokak haritası görüntüsü gibi karmaşık bir bileşenin "sıcak"

bölgesine girmesi gibi farenin etkileşimli nesne içerisindeki hareketine yanıt vermek için kullanabilir.

nativeDragExit Olası alıcı etkileşimli nesne bu olayı, bir sürükleme hareketi sınırlarının dışına taşındığında durumunu geri

yüklemek için kullanabilir.

nativeDragComplete Alıcı etkileşimli nesne bu olayı, listeden bir öğeyi kaldırmak gibi ilişkilendirilen veri modelini güncellemek veya

görsel durumunu geri yüklemek için kullanabilir.

Page 136: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

129ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Not: Ayrıca, HTML içeriğine sahip HTMLLoader nesnesindeki olayları dinleyerek de AIR NativeDragEvent ve

NativeDragManager API'lerini kullanabilirsiniz. Ancak HTML API'si HTML DOM ile daha başarılı bir şekilde

entegredir ve size, varsayılan davranışın kontrolünü sağlar.

Varsayılan sürükle ve bırak davranışı

HTML ortamı metin, görüntüler ve URL'leri de içeren sürükle ve bırak hareketleri için varsayılan davranış sağlar.

Varsayılan davranışı kullanarak her zaman bu tür verileri bir öğenin dışına sürükleyebilirsiniz. Ancak, bir öğeye

yalnızca metin sürükleyebilirsiniz ve yalnızca sayfanın düzenlenebilir bir bölgesinde bulunan öğelere

sürükleyebilirsiniz. Bir sayfanın düzenlenebilir bölgeleri arasında veya içinde metni sürüklediğinizde, varsayılan

davranış bir taşıma eylemi gerçekleştirir. Düzenlenemeyen bir bölgeden veya uygulamanın dışından düzenlenebilir

bölgeye metin sürüklediğinizde, varsayılan davranış bir kopyalama eylemi gerçekleştirir.

drag-and-drop olaylarını kendiniz işleyerek varsayılan davranışı geçersiz kılabilirsiniz. Varsayılan davranışı iptal

etmek için, drag-and-drop olayları için gönderilen nesnelerin preventDefault() yöntemlerini çağırmalısınız.

Seçilen eylemi gerçekleştirmek için gerekli olduğundan, verileri bırakma hedefine ekleyebilir ve sürükleme

kaynağından kaldırabilirsiniz.

Varsayılan olarak kullanıcı istediği metni seçip sürükleyebilir ve görüntüleri ve linkleri sürükleyebilir. -webkit-user-

select WebKit CSS özelliğini, bir HTML öğesinin nasıl seçilebileceğini kontrol etmek için kullanabilirsiniz. Örneğin

-webkit-user-select öğesini none olarak ayarlarsanız, öğe içerikleri seçilebilir olmaz ve sürüklenemez. -webkit-

user-drag CSS özelliğini, bir öğenin bütün olarak sürüklenip sürüklenemeyeceğini kontrol etmek için de

kullanabilirsiniz. Ancak öğenin içerikleri ayrı öğeler olarak kabul edilir. Kullanıcı hala metnin seçili bir kısmını

sürükleyebilir. Daha fazla bilgi için bkz. “CSS Uzantıları” sayfa 204.

HTML'de sürükleme ve bırakma olayları

Bir sürükleme işleminin kaynaklandığı başlatıcı öğe tarafından gönderilen olaylar şunlardır:

Sürükleme hedefi tarafından gönderilen olaylar şunlardır:

Olay Açıklama

dragstart Kullanıcı sürükleme hareketini başlattığında gönderilir. Bu olayın işleyicisi gerekirse olay nesnesinin

preventDefault() yöntemini çağırarak sürüklemeyi engelleyebilir. Sürüklenen verilerin kopyalanabildiğini,

verilere link verilebildiğini veya taşınabildiğini kontrol etmek için, effectAllowed özelliğini ayarlayın. Seçilen

metin, görüntüler ve bağlantılar varsayılan davranış tarafından panoya konur, ancak olay nesnesinin

dataTransfer özelliğini kullanarak sürükleme hareketi için farklı veriler ayarlayabilirsiniz.

drag Sürükleme hareketi boyunca kesintisiz gönderilir.

dragend Kullanıcı sürükleme hareketini bitirmek için fare düğmesini serbest bıraktığında gönderilir.

Olay Açıklama

dragover Sürükleme hareketi öğenin sınırları içerisinde kaldığı sürece kesintisiz gönderilir. Bu olayın işleyicisi

dataTransfer.dropEffect özelliğini, kullanıcı fare düğmesini serbest bırakırsa bırakmanın kopyalama, taşıma

veya link verme eylemlerinden hangisiyle sonuçlanacağını göstermek için ayarlamalıdır.

Page 137: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

130ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Bu olaylara yanıt olarak gönderilen olay nesnesi, mouse olayına benzerdir. (clientX, clientY) ve (screenX,

screenY) gibi mouse olayı özelliklerini, fare konumunu belirlemek için kullanabilirsiniz.

Bir drag olayı nesnesinin en önemli özelliği, sürüklenen verileri içeren dataTransfer öğesidir. dataTransfer nesnesi

aşağıdaki özelliklere ve yöntemlere sahiptir:

HTML sürükle ve bırak için MIME türleri

Bir HTML drag-and-drop olayının dataTransfer nesnesiyle kullanılacak MIME türleri şunlardır:

dragenter Sürükleme hareketi öğenin sınırlarına girdiğinde gönderilir.

Bir dragenter olay işleyicisindeki dataTransfer nesnesinin herhangi bir özelliğini değiştirirseniz, bu

değişiklikler bir sonraki dragover olayı tarafından hızla geçersiz kılınır. Diğer yandan, bir dragenter ve ilk

dragover olayı arasında, farklı özellikler ayarlanmışsa imlecin yanıp sönmesine neden olabilecek kısa bir

gecikme yaşanır. Birçok durumda, her iki olay için de aynı olay işleyicisini kullanabilirsiniz.

dragleave Sürükleme hareketi öğenin sınırlarından çıktığında gönderilir.

drop Kullanıcı verileri öğeye bıraktığında gönderilir. Sürüklenen verilere yalnızca bu olayın işleyicisinde erişilebilir.

Özellik veya Yöntem Açıklama

effectAllowed Sürüklemenin kaynağı tarafından izin verilen efekt. Genellikle dragstart olayının işleyicisi bu değeri ayarlar. Bkz.

“HTML'de sürükleme efektleri” sayfa 131.

dropEffect Hedef veya kullanıcı tarafından seçilen efekt. dragover veya dragenter olay işleyicisinde dropEffect

öğesini ayarlarsanız, AIR, fare imlecini, kullanıcı fare düğmesini serbest bıraktığında oluşacak efekti gösterecek

şekilde günceller. dropEffect kümesi izin verilen efektlerden biriyle eşleşmezse, bırakmaya izin verilmez ve

unavailable imleci görüntülenir. En son dragover veya dragenter olayına yanıt olarak bir dropEffect

ayarlamadıysanız, kullanıcı standart işletim sistemi değiştirici tuşlarını kullanarak izin verilen efektler arasından

seçim yapabilir.

Son efekt, dragend için gönderilen nesnenin dropEffect özelliği tarafından bildirilir. Kullanıcı fare

düğmesini uygun hedefin dışında serbest bırakarak bırakma işlemini iptal ederse, dropEffectnone olarak

ayarlanır.

türler dataTransfer nesnesinde mevcut olan her veri formatı için MIME türü dizeleri içeren bir dizi.

getData(mimeType) mimeType parametresi tarafından belirtilen formattaki verileri alır.

getData() yöntemi yalnızca drop olayına yanıt olarak çağrılabilir.

setData(mimeType) dataTransfer öğesine mimeType parametresi tarafından belirtilen formattaki verileri ekler. Her MIME türü

için setData() öğesini çağırarak birden çok formatta veri ekleyebilirsiniz. Varsayılan sürükleme davranışı

tarafından dataTransfer nesnesine yerleştirilen tüm veriler temizlenir.

setData() yöntemi yalnızca dragstart olayına yanıt olarak çağrılabilir.

clearData(mimeType) mimeType parametresi tarafından belirtilen formattaki tüm verileri temizler.

setDragImage(image,

offsetX, offsetY)

Özel bir sürükleme görüntüsü ayarlar. setDragImage() yöntemi yalnızca dragstart olayına yanıt olarak

çağrılabilir.

Veri formatı MIME türü

Metin "text/plain"

HTML "text/html"

Olay Açıklama

Page 138: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

131ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Uygulama tanımlı dizeler de dahil olmak üzere diğer MIME dizelerini de kullanabilirsiniz. Ancak diğer uygulamalar

aktarılan verileri tanımayabilir veya kullanmayabilir. dataTransfer nesnesine beklenen formatta veriler eklemek

sizin sorumluluğunuzdadır.

Önemli: Yalnızca uygulama sanal alanında kod çalıştırma, bırakılan dosyalara erişebilir. Uygulama dışı sanal alanda

bir File nesnesinin herhangi bir özelliğini okuma veya ayarlama girişiminde bulunmak bir güvenlik hatasına neden olur.

Daha fazla bilgi için bkz. “Uygulama dışı HTML sanal alanlarındaki dosya bırakmaları işleme” sayfa 135.

HTML'de sürükleme efektleri

Sürükleme hareketinin başlatıcısı, dragstart olayının işleyicisindeki dataTransfer.effectAllowed özelliğini

ayarlayarak izin verilen sürükleme efektlerini sınırlandırabilir. Aşağıdaki dize değerleri kullanılabilir:

Sürükleme hareketinin hedefi, kullanıcı bırakmayı tamamlarsa gerçekleştirilen eylemi göstermek için

dataTransfer.dropEffect özelliğini ayarlayabilir. Bırakma efekti izin verilen efektlerden biriyse, sistem uygun

kopyala, taşı veya link ver imlecini görüntüler. Değilse, sistem unavailable imlecini görüntüler. Hedef tarafından

bırakma efekti ayarlanmamışsa, kullanıcı değiştirici tuşlarını kullanarak izin verilen eylemler arasından seçim

yapılabilir.

Hem dragover hem de dragenter olaylarının işleyicilerindeki dropEffect değerini ayarlayın:

function doDragStart(event) { event.dataTransfer.setData("text/plain","Text to drag"); event.dataTransfer.effectAllowed = "copyMove"; } function doDragOver(event) { event.dataTransfer.dropEffect = "copy"; } function doDragEnter(event) { event.dataTransfer.dropEffect = "copy"; }

URL "text/uri-list"

Bitmap "image/x-vnd.adobe.air.bitmap"

Dosya listesi "application/x-vnd.adobe.air.file-list"

Dize değeri Açıklama

"none" Hiçbir sürükleme hareketine izin verilmez.

"copy" Orijinali yerinde kalarak veriler hedefe kopyalanır.

"link" Orijinaline giden bir link kullanılarak veriler bırakma hedefiyle paylaşılır.

"move” Veriler hedefe kopyalanır ve orijinal konumundan kaldırılır.

"copyLink" Veriler kopyalanabilir veya verilere link verilebilir.

"copyMove" Veriler kopyalanabilir veya taşınabilir.

"linkMove" Verilere link verilebilir veya veriler taşınabilir.

"all" Veriler kopyalanabilir, taşınabilir veya verilere link verilebilir. All (Tümü), varsayılan davranışı engellediğinizde

kullanılan varsayılan efekttir.

Veri formatı MIME türü

Page 139: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

132ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Not: dragenter için işleyicideki dropEffect özelliğini her zaman ayarlamanız gerekse de, sonraki dragover olayının

özelliği varsayılan değere sıfırladığını unutmayın. Her iki olaya yanıt olarak da dropEffect öğesini ayarlayın.

Bir HTML öğesinden veri sürüklemek

Varsayılan davranış, bir HTML sayfasındaki içeriğin çoğunun sürüklenerek kopyalanmasına izin verir.

Sürüklenmesine izin verilen içeriği, -webkit-user-select ve -webkit-user-drag CSS özelliklerini kullanarak

kontrol edebilirsiniz.

dragstart olayı için işleyicideki varsayılan dışarı sürükleme davranışını geçersiz kılın. Sürükleme hareketine kendi

verilerinizi koymak için, olay nesnesinin dataTransfer özelliğinin setData() yöntemini çağırın.

Varsayılan davranışa bağlı olmadığınızda bir source nesnesinin hangi sürükleme efektlerini desteklediğini belirtmek

için, dragstart olayı için gönderilen olay nesnesinin dataTransfer.effectAllowed özelliğini ayarlayın.

İstediğiniz efekt kombinasyonunu seçebilirsiniz. Örneğin bir kaynak öğesi hem kopyalama hem de link verme

efektlerini destekliyorsa, özelliği "copyLink" olarak ayarlayın.

Sürüklenen verileri ayarlama

dataTransfer özelliğini kullanarak sürükleme hareketi için verileri dragstart olayının işleyicisine ekleyin. Panoya

veri koymak için, aktarılacak MIME türünü ve verileri ileterek dataTransfer.setData() yöntemini kullanın.

Örneğin uygulamanızda imageOfGeorge kimliğine sahip bir görüntü öğesi varsa, aşağıdaki dragstart olay işleyicisini

kullanabilirsiniz. Bu örnek George'un bir resminin birçok veri formatındaki temsillerini ekler, bu da diğer

uygulamaların sürüklenen verileri kullanabilme olasılığını artırır.

function dragStartHandler(event){ event.dataTransfer.effectAllowed = "copy"; var dragImage = document.getElementById("imageOfGeorge"); var dragFile = new air.File(dragImage.src); event.dataTransfer.setData("text/plain","A picture of George"); event.dataTransfer.setData("image/x-vnd.adobe.air.bitmap", dragImage); event.dataTransfer.setData("application/x-vnd.adobe.air.file-list", new Array(dragFile)); }

Not: dataTransfer nesnesinin setData() yöntemini çağırdığınızda, varsayılan sürükle ve bırak davranışı tarafından

hiç veri eklenmez.

Bir HTML öğesine veri sürükleme

Varsayılan davranış metnin yalnızca sayfanın düzenlenebilir bölgelerine sürüklenmesine izin verir. Öğenin açılış

etiketine contenteditable niteliği eklenerek bir öğenin ve alt öğelerinin düzenlenebilir hale getirilebileceğini

belirtebilirsiniz. Ayrıca, belge nesnesi designMode özelliğini "on" yaparak bir belgenin tamamını düzenlenebilir hale

getirebilirsiniz.

Sürüklenen verileri kabul edebilen herhangi bir öğe için dragenter, dragover ve drop olaylarını işleyerek, bir sayfada

alternatif içeri sürükleme davranışını destekleyebilirsiniz.

İçeri sürüklemeyi etkinleştirme

İçeri sürükleme hareketini işlemek için, öncelikle varsayılan davranışı iptal etmeniz gerekir. Bırakma hedefleri olarak

kullanmak istediğiniz herhangi bir HTML öğesindeki dragenter ve dragover olaylarını dinleyin. Bu olayların

işleyicilerinde, gönderilen olay nesnesinin preventDefault() yöntemini çağırın. Varsayılan davranışın iptal edilmesi

sayesinde, düzenlenemeyen bölgeler de bırakma işlemi alabilir.

Page 140: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

133ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Bırakılan verileri alma

ondrop olayı için işleyicideki bırakılan verilere erişebilirsiniz:

function doDrop(event){ droppedText = event.dataTransfer.getData("text/plain"); }

Panoya verileri okumak için, okunacak veri formatının MIME türünü ileterek dataTransfer.getData() yöntemini

kullanın. Hangi veri formatlarının kullanılabilir olduğunu, dataTransfer nesnesinin types özelliğini kullanarak

bulabilirsiniz. types dizisi, kullanılabilir her formatın MIME türü dizesini içerir.

dragenter veya dragover olaylarında varsayılan davranışı iptal etiğinizde, bırakılan tüm verileri belgede uygun yere

koymaktan siz sorumlu olursunuz. Bir fare konumunu bir öğenin içindeki ekleme noktasına dönüştürebilecek API

mevcut değildir. Bu sınırlama, ekleme türü sürükleme hareketlerinin uygulanmasını zorlaştırabilir.

Örnek: Varsayılan HTML içeri sürükleme davranışını geçersiz kılma

Bu örnek, bırakılan öğede mevcut olan her veri formatını gösteren bir tablo görüntüleyen bir bırakma hedefi uygular.

Varsayılan davranış metnin, linklerin ve görüntülerin uygulama içerisinde sürüklenmesini sağlamak için kullanılır.

Örnek, bırakma hedefi olarak işlev gören div öğesi için varsayılan içeri sürükleme davranışını geçersiz kılar.

Düzenlenemeyen içeriğin içeri sürükleme hareketini kabul etmesini sağlamada anahtar adım, hem dragenter hem de

dragover olayları için gönderilen olay nesnesinin preventDefault() yöntemini çağırmaktır. İşleyici, drop olayına

yanıt olarak, aktarılan verileri HTML satır öğesine dönüştürür ve satırı görüntüleme için bir tabloya ekler.

<html> <head> <title>Drag-and-drop</title> <script language="javascript" type="text/javascript" src="AIRAliases.js"></script> <script language="javascript"> function init(){ var target = document.getElementById('target'); target.addEventListener("dragenter", dragEnterOverHandler); target.addEventListener("dragover", dragEnterOverHandler); target.addEventListener("drop", dropHandler); var source = document.getElementById('source'); source.addEventListener("dragstart", dragStartHandler); source.addEventListener("dragend", dragEndHandler); emptyRow = document.getElementById("emptyTargetRow"); } function dragStartHandler(event){ event.dataTransfer.effectAllowed = "copy"; } function dragEndHandler(event){ air.trace(event.type + ": " + event.dataTransfer.dropEffect); } function dragEnterOverHandler(event){ event.preventDefault(); } var emptyRow;

Page 141: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

134ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

function dropHandler(event){ for(var prop in event){ air.trace(prop + " = " + event[prop]); } var row = document.createElement('tr'); row.innerHTML = "<td>" + event.dataTransfer.getData("text/plain") + "</td>" + "<td>" + event.dataTransfer.getData("text/html") + "</td>" + "<td>" + event.dataTransfer.getData("text/uri-list") + "</td>" + "<td>" + event.dataTransfer.getData("application/x-vnd.adobe.air.file-list") + "</td>"; var imageCell = document.createElement('td'); if((event.dataTransfer.types.toString()).search("image/x-vnd.adobe.air.bitmap") > -1){ imageCell.appendChild(event.dataTransfer.getData("image/x-vnd.adobe.air.bitmap")); } row.appendChild(imageCell); var parent = emptyRow.parentNode; parent.insertBefore(row, emptyRow); } </script> </head> <body onLoad="init()" style="padding:5px"> <div> <h1>Source</h1> <p>Items to drag:</p> <ul id="source"> <li>Plain text.</li> <li>HTML <b>formatted</b> text.</li> <li>A <a href="http://www.adobe.com">URL.</a></li> <li><img src="icons/AIRApp_16.png" alt="An image"/></li> <li style="-webkit-user-drag:none;"> Uses "-webkit-user-drag:none" style. </li> <li style="-webkit-user-select:none;"> Uses "-webkit-user-select:none" style. </li> </ul> </div> <div id="target" style="border-style:dashed;"> <h1 >Target</h1> <p>Drag items from the source list (or elsewhere).</p> <table id="displayTable" border="1"> <tr><th>Plain text</th><th>Html text</th><th>URL</th><th>File list</th><th>Bitmap Data</th></tr> <tr id="emptyTargetRow"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr> </table> </div> </div> </body> </html>

Page 142: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

135ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

Uygulama dışı HTML sanal alanlarındaki dosya bırakmaları işleme

Uygulama dışı içerik, dosyalar bir AIR uygulamasına sürüklendiğinde ortaya çıkan File nesnelerine erişemez. Bu File

nesnelerinden birini sanal alan köprüsü kullanarak uygulama içeriğine göndermek de mümkün değildir. (Nesne

özelliklerine serileştirme sırasında erişilmelidir.) Ancak yine de HTMLLoader nesnesinde AIR nativeDragDrop

olaylarını dinleyerek uygulamanızdaki dosyaları bırakabilirsiniz.

Normalde bir kullanıcı uygulama dışı içerik barındıran bir çerçeveye dosya bırakırsa, drop olayı alt öğeden üst öğeye

yayılmaz. Ancak HTMLLoader (bir AIR uygulamasındaki tüm HTML içeriğinin konteyneri) tarafından gönderilen

olaylar HTML olay akışının bir parçası olmadığı için, hala uygulama içeriğindeki drop olayını alabilirsiniz.

Bir dosya bırakma için olayı almak üzere, üst belge, window.htmlLoader tarafından sağlanan başvuruyu kullanarak

HTMLLoader nesnesine bir olay dinleyicisi ekler:

window.htmlLoader.addEventListener("nativeDragDrop",function(event){ var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT); air.trace(filelist[0].url); });

Aşağıdaki örnek, uzak sanal alana alt sayfa yükleyen bir üst belge kullanır (http://localhost/). Üst öğe HTMLLoader

nesnesindeki nativeDragDrop olayını dinler ve dosya url'sini izler.

<html> <head> <title>Drag-and-drop in a remote sandbox</title> <script language="javascript" type="text/javascript" src="AIRAliases.js"></script> <script language="javascript"> window.htmlLoader.addEventListener("nativeDragDrop",function(event){ var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT); air.trace(filelist[0].url); }); </script> </head> <body> <iframe src="child.html" sandboxRoot="http://localhost/" documentRoot="app:/" frameBorder="0" width="100%" height="100%"> </iframe> </body> </html>

Alt belge, HTML dragenter ve dragover olay işleyicilerindeki Event nesnesi preventDefault() yöntemini

engelleyerek geçerli bir bırakma hedefi sunmalıdır, yoksa drop olayı gerçekleşemez.

Page 143: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

136ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Sürükle ve bırak

<html> <head> <title>Drag and drop target</title> <script language="javascript" type="text/javascript"> function preventDefault(event){ event.preventDefault(); } </script> </head> <body ondragenter="preventDefault(event)" ondragover="preventDefault(event)"> <div> <h1>Drop Files Here</h1> </div> </body> </html>

Daha fazla bilgi için bkz. “HTML ve JavaScript'te programlama” sayfa 206.

Page 144: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

137

Bölüm 16: Kopyalama ve yapıştırma

Sistem panosundan ve sistem panosuna bilgi yapıştırmak için pano API'sindeki sınıfları kullanın. Adobe® AIR™

uygulamasına veya Adobe® AIR™ uygulamasından aktarılabilecek veri formatları şunlardır:

• Bitmapler

• Dosyalar

• Metin

• HTML formatlı metin

• Zengin Metin Formatlı veriler

• URL dizeleri

• Serileştirilmiş nesneler

• Nesne başvuruları (yalnızca kaynak uygulama içinde geçerli)

Kopyalama ve yapıştırma hakkında ek çevrimiçi bilgiler

Bu kaynaklardan kopyalama ve yapıştırma hakkında daha fazla bilgi edinebilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

• Sürükle ve bırak ve kopyala ve yapıştır işlevlerini destekleme

Dil Başvurusu

• Clipboard

• ClipboardFormats

• ClipboardTransferMode

Daha Fazla Bilgi

• Flash için Adobe AIR Geliştirici Bağlantısı ('AIR kopyalama ve yapıştırma'yı arayın)

Kopyalama ve yapıştırma temel bilgileri

Kopyala ve yapıştır API'si aşağıdaki sınıfları içerir.

Page 145: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

138ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

Statik Clipboard.generalClipboard özelliği, işletim sistemi panosunu temsil eder. Clipboard sınıfı, clipboard

nesnelerinden veri okuma ve bu nesnelere veri yazmaya yönelik yöntemler sağlar. Sürükleme ve bırakma API'sini

kullanarak verileri aktarmak için yeni Clipboard nesneleri de oluşturulabilir.

HTML ortamı, kopyalama ve yapıştırma için alternatif bir API sağlar. Her iki API de uygulama sanal alanı içinde kod

çalıştırma tarafından kullanılabilir, ancak uygulama dışı içerikte yalnızca HTML API'si kullanılabilir. (Bkz. “HTML

kopyala ve yapıştır” sayfa 139.)

HTMLLoader ve TextField sınıfları, normal kopyalama ve yapıştırma klavye kısayolları için varsayılan davranışı

uygular. Özel bileşenler için kopyalama ve yapıştırma kısayolu davranışını uygulamak üzere doğrudan bu tuş

girişlerini dinleyebilirsiniz. Ayrıca tuş girişlerine dolaylı olarak yanıt vermek için, tuş eşdeğerleriyle beraber yerel

menü komutlarını da kullanabilirsiniz.

Diğer uygulamaların verileri anlama ve kullanma kapasitesini artırmak için, aynı bilgilerin farklı temsilleri tek bir

Clipboard nesnesinde kullanılabilir hale getirilebilir. Örneğin bir görüntü, görüntü verisi, serileştirilmiş Bitmap

nesnesi veya bir dosya olarak dahil edilebilir. Bir formattaki verilerin oluşturulması ertelenebilir, böylece bu formattaki

veriler okunana kadar format gerçekten oluşturulmaz.

Not: AIR uygulamasından çıkıldıktan sonra panoya yazılmış olan verilere erişileceğinin garantisi yoktur.

Sistem panosundan okuma ve sistem panosuna yazma

İşletim sistemi panosunu okumak için, okunacak formatın adını ileten Clipboard.generalClipbooard nesnesinin

getData() yöntemini çağırın:

import flash.desktop.Clipboard; import flash.desktop.ClipboardFormats; if(Clipboard.generalClipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)){ var text:String = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT); }

Panoya yazmak için, verileri Clipboard.generalClipboard nesnesine bir veya daha fazla formatta ekleyin. Aynı

formattaki verilerin otomatik olarak üzerine yazılır. Ancak, diğer formatlardaki ilişkili olmayan verilerin silindiğinden

de emin olmak için yeni veri yazmadan önce sistem panosunu temizlemek yararlı olur.

import flash.desktop.Clipboard; import flash.desktop.ClipboardFormats; var textToCopy:String = "Copy to clipboard."; Clipboard.generalClipboard.clear(); Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT, textToCopy, false);

Paket Sınıflar

flash.desktop • Clipboard

• ClipboardFormats

• ClipboardTransferMode

Kopyala ve yapıştır API'siyle kullanılan sabitler aşağıdaki sınıflarda tanımlanır:

• ClipboardFormats

• ClipboardTransferMode

Page 146: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

139ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

Not: Yalnızca uygulama sanal alanındaki kod çalıştırma, sistem panosuna doğrudan erişebilir. Uygulama dışı HTML

içeriğinde panoya yalnızca HTML copy veya paste olaylarından biri tarafından gönderilen olay nesnesinin

clipboardData özelliğini kullanarak erişebilirsiniz.

HTML kopyala ve yapıştır

HTML ortamı kopyalama ve yapıştırma için kendi olay kümesini ve varsayılan davranışı sağlar. Yalnızca uygulama

sanal alanındaki kod çalıştırma, AIR Clipboard.generalClipboard nesnesini kullanarak sistem panosuna

doğrudan erişebilir. Uygulama dışı bir sanal alandaki JavaScript kodu, HTML belgesindeki bir öğe tarafından

gönderilen copy veya paste olaylarından birine yanıt olarak gönderilen olay nesnesini kullanarak panoya erişebilir.

Copy ve paste olayları şunları içerir: copy, cut ve paste. Bu olaylar için gönderilen nesne clipboardData özelliğiyle

panoya erişim sağlar.

Varsayılan Davranış

Varsayılan olarak AIR, klavye kısayolu veya bağlam menüsü tarafından oluşturulabilen kopyala komutuna yanıt

olarak seçili öğeleri kopyalar. Düzenlenebilir bölgeler içerisinde, AIR, kes komutuna yanıt olarak metni keser veya

yapıştır komutuna yanıt olarak metni imlecin bulunduğu yere veya seçime yapıştırır.

Varsayılan davranışı engellemek için, olay işleyiciniz gönderilen olay nesnesinin preventDefault() yöntemini

çağırabilir.

olay nesnesinin clipboardData özelliğini kullanma

Copy veya paste olaylarından birinin sonucu olarak gönderilen olay nesnesinin clipboardData özelliği sayesinde,

pano verilerini okuyabilir ve yazabilirsiniz.

Bir copy veya cut olayını işlerken panoya yazmak için, kopyalanacak verileri ve MIME türünü ileten clipboardData

nesnesinin setData() yöntemini kullanın:

function customCopy(event){ event.clipboardData.setData("text/plain", "A copied string."); }

Yapıştırılan verilere erişmek için, veri formatının MIME türünü ileten clipboardData nesnesinin getData()

yöntemini kullanabilirsiniz. Kullanılabilir formatlar types özelliği tarafından bildirilir.

function customPaste(event){ var pastedData = event.clipboardData("text/plain"); }

getData() yöntemine ve types özelliğine yalnızca paste olayı tarafından gönderilen olay nesnesinde erişilebilir.

Aşağıdaki örnek bir HTML sayfasında varsayılan kopyalama ve yapıştırma davranışının nasıl geçersiz kılınacağını

gösterir. copy olay işleyicisi, kopyalanan metni italik yapar ve HTML metni olarak panoya yapıştırır. cut olay işleyicisi

seçili verileri panoya kopyalar ve belgeden kaldırır. paste işleyicisi pano içeriklerini HTML olarak ekler ve eklemeyi

kalın metin olarak biçimlendirir.

Page 147: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

140ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

<html> <head> <title>Copy and Paste</title> <script language="javascript" type="text/javascript"> function onCopy(event){ var selection = window.getSelection(); event.clipboardData.setData("text/html","<i>" + selection + "</i>"); event.preventDefault(); } function onCut(event){ var selection = window.getSelection(); event.clipboardData.setData("text/html","<i>" + selection + "</i>"); var range = selection.getRangeAt(0); range.extractContents(); event.preventDefault(); } function onPaste(event){ var insertion = document.createElement("b"); insertion.innerHTML = event.clipboardData.getData("text/html"); var selection = window.getSelection(); var range = selection.getRangeAt(0); range.insertNode(insertion); event.preventDefault(); } </script> </head> <body onCopy="onCopy(event)" onPaste="onPaste(event)" onCut="onCut(event)"> <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</p> </body> </html>

Kopyalama ve yapıştırma için menü komutları ve tuş girişleri

Kopyalama ve yapıştırma işlevleri genellikle menü işlevleri ve klavye kısayollarıyla tetiklenir. OS X'te, kopyala ve

yapıştır komutlarına sahip bir düzenleme menüsü işletim sistemi tarafından otomatik olarak oluşturulur, ancak kendi

kopyalama ve yapıştırma işlevlerinizi eklemek için bu menü komutlarına dinleyici eklemeniz gerekir. Windows'ta,

sistem kenarlığını kullanan herhangi bir pencereye yerel bir düzenleme menüsü ekleyebilirsiniz. (Ayrıca Flex ve

ActionScript ile yerel olmayan menüler oluşturabilirsiniz veya HTML içeriğinde DHTML kullanabilirsiniz, ancak bu

konu, bu açıklamanın kapsamına girmemektedir.)

Page 148: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

141ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

Kopyalama ve yapıştırma işlevleri genellikle menü işlevleri ve klavye kısayollarıyla tetiklenir. OS X'te, kopyala ve

yapıştır komutlarına sahip bir düzenleme menüsü işletim sistemi tarafından otomatik olarak oluşturulur, ancak kendi

kopyalama ve yapıştırma işlevlerinizi eklemek için bu menü komutlarına dinleyici eklemeniz gerekir. Windows'ta,

sistem kenarlığını kullanan herhangi bir pencereye yerel bir düzenleme menüsü ekleyebilirsiniz. (Ayrıca ActionScript

ile yerel olmayan menüler oluşturabilirsiniz veya HTML içeriğinde DHTML kullanabilirsiniz, ancak bu konu, bu

açıklamanın kapsamına girmemektedir.)

Klavye kısayollarına yanıt olarak kopyala ve yapıştır komutlarını tetiklemek için, yerel bir uygulamada veya pencere

menüsünde ilgili komut öğelerine tuş eşdeğerleri atayabilir veya doğrudan tuş girişlerini dinleyebilirsiniz.

Bir menü komutuyla kopyalama veya yapıştırma işlemi başlatma

Kopyalama veya yapıştırma işlemini bir menü komutuyla tetiklemek için, işleyici işlevlerinizi çağıran menü öğelerinde

select olayı için dinleyiciler eklemeniz gerekir.

İşleyici işleviniz çağrıldığında, sahnenin focus özelliği kullanılarak kopyalanacak veya yapıştırılacak nesneyi

bulabilirsiniz. Ardından, kopyalama, kesme veya yapıştırma mantığını yürütmek için odaklanılan nesnenin ilgili

yöntemini (veya hiçbir nesnenin odağı yoksa genel bir geri dönme yöntemini) çağırabilirsiniz. Örneğin aşağıdaki copy

olay işleyicisi, odaklanılan nesnenin doğru türde olup olmadığını, bu durumda Scrap adlı bir sınıfı kontrol eder ve daha

sonra nesnenin doCopy() yöntemini çağırır.

function copyCommand(event:Event):void{ if(NativeApplication.nativeApplication.activeWindow.stage.focus is Scrap){ Scrap(NativeApplication.nativeApplication.activeWindow.stage.focus).doCopy(); } else { NativeApplication.nativeApplication.copy(); } }

Örnekteki copyCommand() odaklanılan nesnenin sınıfını tanımazsa, NativeApplication copy() yöntemini çağırır.

NativeApplication copy() yöntemi odaklanılan nesneye dahili bir kopyala komutu gönderir. Dahili komut yalnızca

TextArea ve HTMLLoader nesneleri tarafından tanınır. Kesme, yapıştırma, tümünü seçme ve yalnızca TextArea için

temizleme, geri alma ve yineleme için benzer komutlar kullanılabilir.

Not: Özel bir bileşende bu dahili komutlara yanıt vermek için sağlanmış bir API yoktur. TextArea veya HTMLLoader

sınıflarını genişletmelisiniz veya bu nesnelerden birini özel bileşeninize dahil etmelisiniz. Bir TextArea veya

HTMLLoader sınıfı dahil ederseniz bileşeniniz, odağı, odak bileşenin kendisinde olduğunda TextArea veya

HTMLLoader nesnesi her zaman odağı koruyacak şekilde yönetmelidir.

HTML içeriğinde varsayılan kopyalama ve yapıştırma davranışı, NativeApplication düzenleme komutları kullanılarak

tetiklenebilir. Aşağıdaki örnek düzenlenebilir bir HTML belgesi için bir düzenleme menüsü oluşturur:

Bir önceki örnek Mac OS X'te uygulama menüsünü değiştirir, ancak var olan öğeleri bularak ve onlara olay

dinleyicileri ekleyerek de varsayılan Düzen menüsünü kullanabilirsiniz.

Kopyala veya yapıştır komutunu çağırmak için bir bağlam menüsü kullanırsanız, hangi nesnenin kopyala veya yapıştır

komutu için uygun hedef olduğunu belirlemek için menü açıldığında veya bir öğe seçildiğinde gönderilen

ContextMenuEvent nesnesinin contextMenuOwner özelliğini kullanabilirsiniz.

Mac OS X'te varsayılan menü öğelerini bulma

Mac OS X'teki uygulama menüsünde varsayılan düzen menüsünü ve belirli kopyala, kes ve yapıştır komut öğelerini

bulmak için, NativeMenuItem nesnelerinin label özelliğini kullanarak menü hiyerarşisi içinde arama yapabilirsiniz.

Örneğin aşağıdaki işlev bir adı alır ve menüde eşleşen etikete sahip öğeyi bulur.

Page 149: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

142ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

private function findItemByName(menu:NativeMenu, name:String, recurse:Boolean = false):NativeMenuItem{ var searchItem:NativeMenuItem = null; for each (var item:NativeMenuItem in menu.items){ if(item.label == name){ searchItem = item; break; } if((item.submenu != null) && recurse){ searchItem = findItemByName(item.submenu, name, recurse); }

if(searchItem != null){ break; } } return searchItem; }

Aramaya alt menüleri de dahil etmek için recurse parametresini true olarak veya yalnızca iletilen menüyü dahil

etmek için false olarak ayarlayabilirsiniz.

Tuş girişiyle kopyala veya yapıştır komutu başlatma

Uygulamanız kopyalama ve yapıştırma için yerel pencere veya uygulama menüleri kullanıyorsa, klavye kısayollarını

uygulamak için menü öğelerine tuş eşdeğerleri ekleyebilirsiniz. Aksi takdirde, aşağıdaki örnekte gösterildiği gibi

kendiniz ilgili tuş girişlerini dinleyebilirsiniz.

private function init():void{ stage.addEventListener(KeyboardEvent.KEY_DOWN, keyListener); } private function keyListener(event:KeyboardEvent):void{ if(event.ctrlKey){ event.preventDefault(); switch(String.fromCharCode(event.charCode)){ case "c": NativeApplication.nativeApplication.copy(); break; case "x": NativeApplication.nativeApplication.cut(); break; case "v": NativeApplication.nativeApplication.paste(); break; case "a": NativeApplication.nativeApplication.selectAll(); break; case "z": NativeApplication.nativeApplication.undo(); break; case "y": NativeApplication.nativeApplication.redo(); break; } } }

Page 150: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

143ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

HTML içeriğinde kopyalama ve yapıştırma için klavye kısayolları varsayılan olarak uygulanır. Kopyalama ve

yapıştırma için sıklıkla kullanılan tüm tuş girişlerini, anahtar olay dinleyicisi kullanarak bindirmek mümkün değildir.

Varsayılan davranışı geçersiz kılmanız gerekiyorsa, copy ve paste olaylarının kendilerini dinlemek daha başarılı bir

strateji olur.

Pano veri formatları

Pano formatları bir Clipboard nesnesinde bulunan verileri açıklar. AIR, ActionScript veri türleri ve sistem panosu

formatları arasında standart veri formatlarını otomatik olarak çevirir. Buna ek olarak, uygulama tanımlı formatlar

kullanılarak AIR uygulamalarının içerisinde veya arasında uygulama nesneleri aktarılabilir.

Bir Clipboard nesnesi aynı bilginin farklı formatlardaki temsillerini içerebilir. Örneğin Sprite'ı temsil eden bir

Clipboard nesnesi aynı uygulama içinde kullanmak üzere bir başvuru formatı, başka bir AIR uygulaması tarafından

kullanılmak üzere bir serileştirilmiş format, bir görüntü düzenleyicisi tarafından kullanılmak üzere bir bitmap formatı

ve Sprite'ın bir temsilini dosya sistemine kopyalamak veya sürüklemek üzere, PNG dosyasını kodlamak için gecikmeli

oluşturmaya sahip olma ihtimali olan bir dosya liste formatı içerebilir.

Standart veri formatları

Standart format adlarını tanımlayan sabitler ClipboardFormats sınıfında sağlanır:

Not: Şu anda Zengin Metin Formatlı verileri destekleyen Flash metin kontrolü veya bileşeni yoktur. RTF verilerini bir

kontrole yapıştırmak için, öncelikle RTF işaretlemesini HTML işaretlemesine (veya düz metne) çevirin. Benzer şekilde,

RTF verilerini panoya kopyalamak için, bir metni veya HTML dizesini uygun RTF işaretlemesiyle tamamlanan

ByteArray nesnesine dönüştürün. Flash, RTF verilerinin başka bir formata dönüştürülmesi için bir utility sınıfı

sağlamaz.

HTML içeriğindeki bir copy, cut veya paste olayına yanıt olarak veri kopyalayıp yapıştırırken, ClipboardFormat

dizeleri yerine MIME türleri kullanılmalıdır. Geçerli veri MIME türleri şunlardır:

Sabit Açıklama

TEXT_FORMAT Text-format verileri, ActionScript String sınıfına çevrilir ve bu sınıftan geri çevrilir.

HTML_FORMAT HTML işaretlemeli metin.

RICH_TEXT_FORMAT Rich-text-format verileri, ActionScript ByteArray sınıfına çevrilir ve bu sınıftan geri çevrilir. RTF işaretlemesi,

herhangi bir şekilde yorumlanmaz veya çevrilmez.

BITMAP_FORMAT Bitmap-format verileri, ActionScript BitmapData sınıfına çevrilir ve bu sınıftan geri çevrilir.

FILE_LIST_FORMAT File-list-format verileri, ActionScript File nesneleri dizisine çevrilir ve bu diziden geri çevrilir.

URL_FORMAT URL formatlı veriler, ActionScript String sınıfına ve bu sınıftan başka formata çevrilir.

MIME türü Açıklama

Metin "text/plain"

URL "text/uri-list"

Bitmap "image/x-vnd.adobe.air.bitmap"

Dosya listesi "application/x-vnd.adobe.air.file-list"

Page 151: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

144ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

Not: Zengin metin formatlı veriler, HTML içeriğindeki paste olayının sonucu olarak gönderilen olay nesnesinin

clipboardData özelliğinden kullanılamaz.

Özel veri formatları

Nesneleri başvurular veya serileştirilmiş kopyalar olarak aktarmak için, uygulama tanımlı özel formatlar

kullanabilirsiniz. Başvurular yalnızca aynı AIR uygulaması içinde geçerlidir. Serileştirilmiş nesneler Adobe AIR

uygulamaları arasında aktarılabilir, ancak yalnızca serileştirildiğinde ve serileştirmesi kaldırıldığında geçerliliği devam

eden nesnelerle kullanılabilir. Özellikleri basit türler veya serileştirilmiş nesneler olduğunda nesneler genellikle

serileştirilebilir.

Serileştirilmiş bir nesneyi Clipboard nesnesine eklemek için, Clipboard.setData() yöntemini çağırırken

serileştirilebilen parametreyi true olarak ayarlayın. Format adı standart formatlardan biri veya uygulamanız

tarafından tanımlanan rastgele bir dize olabilir.

Aktarım modları

Bir nesne panoya özel veri formatı kullanılarak yazıldığında, nesne verileri panodan başvuru olarak veya orijinal

nesnenin serileştirilmiş kopyası olarak okunabilir. AIR, nesnelerin başvuru olarak mı serileştirilmiş kopyalar olarak mı

aktarılacağını belirleyen dört aktarım modu tanımlamaktadır:

Özel veri formatlarını okuma ve yazma

Panoya bir nesne yazarken format parametresi için, ayrılmış önek air: ile başlamayan herhangi bir dizeyi

kullanabilirsiniz. Nesneyi okumak için format olarak aynı dizeyi kullanın. Aşağıdaki örnek nesnelerin panoya nasıl

okunacağını ve yazılacağını gösterir:

public function createClipboardObject(object:Object):Clipboard{ var transfer:Clipboard = new Clipboard(); transfer.setData("object", object, true); }

Clipboard nesnesinden serileştirilmiş bir nesneyi ayıklamak için (bırakma veya yapıştırma işleminden sonra), aynı

format adını ve cloneOnly veya clonePreferred aktarım modlarını kullanın.

var transfer:Object = clipboard.getData("object", ClipboardTransferMode.CLONE_ONLY);

Başvuru her zaman Clipboard nesnesine eklenir. Clipboard nesnesinden serileştirilmiş kopya yerine başvuruyu

ayıklamak için (bırakma veya yapıştırma işleminden sonra), originalOnly veya originalPreferred aktarım

modlarını kullanın:

var transferredObject:Object = clipboard.getData("object", ClipboardTransferMode.ORIGINAL_ONLY);

Başvurular yalnızca Clipboard nesnesi geçerli AIR uygulaması kaynaklıysa geçerlidir. Başvuru varsa başvuruya

erişmek için originalPreferred aktarım modunu, başvuru yoksa serileştirilmiş klonu kullanın.

Aktarım modu Açıklama

ClipboardTransferModes.ORIGINAL_ONLY Yalnızca bir başvuru döndürülür. Bir başvuru varsa, boş bir değer döndürülür.

ClipboardTransferModes.ORIGINAL_PREFFERED Varsa bir başvuru döndürülür. Aksi takdirde serileştirilmiş bir kopya döndürülür.

ClipboardTransferModes.CLONE_ONLY Yalnızca serileştirilmiş bir kopya döndürülür. Serileştirilmiş kopya yoksa, boş bir değer

döndürülür.

ClipboardTransferModes.CLONE_PREFFERED Varsa serileştirilmiş bir kopya döndürülür. Aksi takdirde bir başvuru döndürülür.

Page 152: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

145ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

Gecikmeli oluşturma

Bir veri formatını oluşturma hesaplama yönünden pahalıysa, istenilen verileri sağlayan bir işlev sağlayarak gecikmeli

oluşturmayı kullanabilirsiniz. İşlev yalnızca, bırakma veya yapıştırma işleminin alıcısı gecikmeli formattaki verileri

isterse çağrılır.

Oluşturma işlevi bir Clipboard nesnesine setDataHandler() yöntemi kullanılarak eklenir. İşlevin verileri uygun

formatta döndürmesi gerekir. Örneğin, setDataHandler(ClipboardFormat.TEXT_FORMAT, writeText) öğesini

çağırdıysanız, writeText() işlevi bir dize döndürmelidir.

Aynı türdeki veri formatı bir Clipboard nesnesine setData() yöntemiyle eklenirse, bu veriler gecikmeli sürüme göre

önceliğe sahip olacaktır (oluşturma işlevi hiçbir zaman çağrılmaz). Aynı clipboard verilerine ikinci kez erişilirse,

oluşturma işlevi çağırılabilir veya çağrılmayabilir.

Not: Mac OS X'te, standart AIR pano formatları kullanılırken gecikmeli oluşturma gerçekleşmez. Oluşturma işlevi

hemen çağrılır.

Gecikmeli oluşturma işlevi kullanarak metin yapıştırma

Aşağıdaki örnek gecikmeli oluşturma işlevinin nasıl uygulanacağını gösterir.

Örnekteki Kopyala düğmesine basıldığında uygulama, önceki pano işlemlerinden geriye hiç veri kalmamasını

sağlamak için sistem panosunu temizler, ardından pano setDataHandler() yöntemini kullanarak renderData()

işlevini panoya koyar.

Yapıştır düğmesine basıldığında, uygulama panoya erişir ve hedef metni ayarlar. Panodaki metin veri formatı bir

dizeyle değil işlevle ayarlandığından pano, renderData() işlevini çağırır. renderData() işlevi metni kaynak metinde

döndürür, ardından bu metin hedef metne atanır.

Kaynak metni Yapıştır düğmesine basmadan önce düzenlerseniz, düzenleme kopyala düğmesine basıldıktan sonra

gerçekleşmiş bile olsa, düzenlemenin yapıştırılan metne yansıtılacağını göz önünde bulundurun. Bunun nedeni,

yapıştır düğmesine basılana kadar oluşturma işlevinin kaynak metni kopyalamamasıdır. (Gecikmeli oluşturmayı

gerçek bir uygulamada kullanırken, bu sorunun önüne geçmek için kaynak verileri bir şekilde saklamak veya korumak

isteyebilirsiniz.)

package { import flash.desktop.Clipboard; import flash.desktop.ClipboardFormats; import flash.display.Sprite; import flash.text.TextField; import flash.events.MouseEvent; public class DeferredRenderingExample extends Sprite { var sourceTxt:TextField; var destinationTxt:TextField; public function DeferredRenderingExample():void { sourceTxt = createTextField(10, 10, 210, 380, false); addChild(sourceTxt); sourceTxt.text = "Neque porro quisquam est qui dolorem " + "ipsum quia dolor sit amet, consectetur, adipisci velit." destinationTxt = createTextField(330, 10, 210, 380, false); addChild(destinationTxt);

Page 153: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

146ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

var copyBtn:TextField = createTextField(230, 50, 90, 20, true); copyBtn.text = "Copy"; addChild(copyBtn); copyBtn.addEventListener(MouseEvent.CLICK, onCopy); var pasteBtn:TextField = createTextField(230, 80, 90, 20, true); pasteBtn.text = "Paste"; addChild(pasteBtn); pasteBtn.addEventListener(MouseEvent.CLICK, onPaste); } private function createTextField(x:Number, y:Number, width:Number, height:Number, isBtn:Boolean = false):TextField { var newTxt:TextField = new TextField(); newTxt.x = x; newTxt.y = y; newTxt.height = height; newTxt.width = width; newTxt.border = true; newTxt.background = true; if (isBtn) { newTxt.backgroundColor = 0xDDDDDDEE; newTxt.selectable = false; } else { newTxt.multiline = true; newTxt.wordWrap = true; newTxt.backgroundColor = 0xEEEEEEEE; } return newTxt; } public function onCopy(event:MouseEvent):void { Clipboard.generalClipboard.clear(); Clipboard.generalClipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT, renderData); } public function onPaste(event:MouseEvent):void {

Page 154: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

147ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Kopyalama ve yapıştırma

destinationTxt.text = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) as String; } public function renderData():String { trace("Rendering data"); var sourceStr:String = sourceTxt.text; if (sourceTxt.selectionEndIndex > sourceTxt.selectionBeginIndex) { // something is selected return sourceStr.substring(sourceTxt.selectionBeginIndex, sourceTxt.selectionEndIndex); } else { return sourceStr; } } } }

Page 155: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

148

Bölüm 17: Bayt dizileriyle çalışma

ByteArray sınıfı, esasında bayt dizisi olan ikili veri akışını okumanızı veya ikili veri akışına yazmanızı sağlar. Bu sınıf

verilere en basit şekilde erişmek için bir yol sağlar. Bilgisayar verileri baytlardan veya 8 bitlik gruplardan oluştuğu için,

verilerin bayt olarak okunabilmesi, sınıf ve erişim yöntemi olmayan verilere erişebildiğiniz anlamına gelir. ByteArray

sınıfı, bir bitmapten ağda dolaşan veri akışına kadar bayt düzeyinde herhangi bir veri akışını ayrıştırmanızı sağlar.

writeObject() yöntemi, bir nesneyi serileştirilmiş Action Message Format (AMF) olarak ByteArray öğesine

yazmanızı sağlar; readObject() yöntemi ise ByteArray öğesinden orijinal veri türü değişkenine kadar, serileştirilmiş

bir nesneyi okumanızı sağlar. Görüntüleme listesine yerleştirilebilen nesneler olan görüntüleme nesneleri dışındaki

tüm nesneleri serileştirebilirsiniz. Ayrıca custom sınıfı çalışma zamanı için kullanılabilirse, serileştirilmiş nesneleri

tekrar custom sınıfı örneklerine atayabilirsiniz. Bir nesneyi AMF'ye dönüştürdükten sonra, bir ağ bağlantısı üzerinden

etkili bir şekilde aktarabilir veya bir dosyaya kaydedebilirsiniz.

Burada anlatılan örnek Adobe® AIR™ uygulaması bir .zip dosyasını, .zip dosyasının içerdiği dosya listesini çıkartarak

ve onları masaüstüne yazarak bayt akışını işleme örneği olarak okur.

ByteArray okuma ve yazma

ByteArray sınıfı, flash.utils paketinin bir parçasıdır. ActionScript 3.0'da ByteArray nesnesi oluşturmak için, aşağıdaki

örnekte gösterildiği gibi ByteArray sınıfını içe aktarın ve yapıcıyı çağırın:

import flash.utils.ByteArray; var stream:ByteArray = new ByteArray();

ByteArray yöntemleri

Anlamlı bir veri akışı, istediğiniz bilgiyi bulmak için analiz edebileceğiniz bir format olarak organize edilir. Örneğin

basit bir çalışan dizisindeki kayıt büyük olasılıkla kimlik numarası, ad, adres, telefon numarası vb. içerir. MP3 ses

dosyası, indirilmekte olan dosyanın başlığını, yazarını, albümü, yayınlanma tarihini ve türünü belirten bir Kimlik3

etiketi içerir. Format sayesinde, veri akışındaki verileri hangi sırada bekleyeceğinizi bilirsiniz. Bayt akışını mantıklı bir

şekilde okuyabilirsiniz.

ByteArray sınıfı bir veri akışından okumayı ve veri akışına yazmayı kolaylaştıran birçok yöntem içerir. Bunlardan

bazıları readBytes() ve writeBytes(), readInt() ve writeInt(), readFloat() ve writeFloat(),

readObject() ve writeObject() ve readUTFBytes() ve writeUTFBytes() yöntemleridir. Bu yöntemler sayesinde

veri akışından verileri belirli veri türleri değişkenlerinde okuyabilir ve belirli veri türlerini doğrudan ikili veri akışına

yazabilirsiniz.

Örneğin aşağıdaki kod basit bir dize dizisini ve kayar nokta sayısını okur ve her öğeyi ByteArray öğesine yazar. Dizinin

organizasyonu sayesinde kod, verileri yazmak için uygun ByteArray yöntemlerini (writeUTFBytes() ve

writeFloat()) çağırabilir. Yinelenen veri modeli sayesinde diziyi bir döngüyle okuyabilirsiniz.

Page 156: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

149ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

// The following example reads a simple Array (groceries), made up of strings // and floating-point numbers, and writes it to a ByteArray. import flash.utils.ByteArray; // define the grocery list Array var groceries:Array = ["milk", 4.50, "soup", 1.79, "eggs", 3.19, "bread" , 2.35] // define the ByteArray var bytes:ByteArray = new ByteArray(); // for each item in the array for (var i:int = 0; i < groceries.length; i++) { bytes.writeUTFBytes(groceries[i++]); //write the string and position to the next item bytes.writeFloat(groceries[i]);// write the float trace("bytes.position is: " + bytes.position);//display the position in ByteArray } trace("bytes length is: " + bytes.length);// display the length

position özelliği

position özelliği, okuma veya yazma sırasında ByteArray öğesini dizine alan işaretçinin geçerli konumunu saklar.

position özelliğinin başlangıç değeri, aşağıdaki kodda da gösterildiği gibi 0'dır (sıfır):

var bytes:ByteArray = new ByteArray(); trace("bytes.position is initially: " + bytes.position); // 0

Bir ByteArray öğesinden okuma veya ByteArray öğesine yazma işlemi gerçekleştirdiğinizde, kullandığınız yöntem,

position özelliğini okunan veya yazılan son baytın hemen ardından konuma işaret edecek şekilde güncelleştirir.

Örneğin aşağıdaki kod ByteArray öğesine bir dize yazar ve sonrasında position özelliği, ByteArray öğesindeki dizenin

hemen ardından bayta işaret eder.

var bytes:ByteArray = new ByteArray(); trace("bytes.position is initially: " + bytes.position); // 0 bytes.writeUTFBytes("Hello World!"); trace("bytes.position is now: " + bytes.position);// 12

Benzer şekilde, bir okuma işlemi de okunan bayt sayısını position özelliğine göre artırır.

var bytes:ByteArray = new ByteArray(); trace("bytes.position is initially: " + bytes.position); // 0 bytes.writeUTFBytes("Hello World!"); trace("bytes.position is now: " + bytes.position);// 12 bytes.position = 0; trace("The first 6 bytes are: " + (bytes.readUTFBytes(6)));//Hello trace("And the next 6 bytes are: " + (bytes.readUTFBytes(6)));// World!

Söz konusu uzaklıkta okumak veya yazmak için position özelliğini ByteArray öğesinde belirli bir konuma

ayarlayabilirsiniz.

bytesAvailable ve length özellikleri

length ve bytesAvailable özellikleri, ByteArray öğesinin ne kadar süreceğini ve geçerli konumdan sonuna kadar

kaç baytı kaldığını gösterir. Aşağıdaki örnek bu özellikleri nasıl kullanabileceğinizi gösterir. Örnek, metnin bir Dizesini

ByteArray öğesine yazar ve ardından, “a” ile veya son ile karşılaşana kadar (bytesAvailable <= 0) bir kerede bir bayt

olacak şekilde ByteArray öğesini okur.

Page 157: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

150ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

var bytes:ByteArray = new ByteArray(); var text:String = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus etc."; bytes.writeUTFBytes(text); // write the text to the ByteArray trace("The length of the ByteArray is: " + bytes.length);// 70 bytes.position = 0; // reset position while (bytes.bytesAvailable > 0 && (bytes.readUTFBytes(1) != 'a')) { //read to letter a or end of bytes } if (bytes.position < bytes.bytesAvailable) { trace("Found the letter a; position is: " + bytes.position); // 23 trace("and the number of bytes available is: " + bytes.bytesAvailable);// 47 }

endian özelliği

Bilgisayarlar çok baytlı, yani saklanması için 1 bayttan fazla bellek gereken sayıları saklama yöntemlerine göre farklılık

gösterebilir. Örneğin bir tam sayı belleğin 4 baytını veya 32 bitini kaplayabilir. Bazı bilgisayarlar öncelikle sayının en

yüksek değerli baytını en düşük bellek adresinde saklar, diğer bilgisayarlar ise öncelikle en düşük değerli baytı saklar.

Bilgisayarın veya bayt sıralamasının bu niteliği, big endian (önce en yüksek değerli bayt) veya little endian (önce en

düşük değerli bayt) olarak adlandırılır. Örneğin 0x31323334 sayısı big endian ve little endian bayt sıralaması için

aşağıdaki gibi saklanır, a0, 4 bayt arasında en düşük bellek adresini ve a3 en yüksek olanı temsil eder:

ByteArray sınıfının endian özelliği, işlediğiniz çok baytı sayılar için bu bayt sırasını belirtmenizi sağlar. Bu özellik için

kabul edilebilir değerler "bigEndian" veya "littleEndian" değerleridir ve Endian sınıfı, endian özelliğini bu

dizelerle ayarlamak için BIG_ENDIAN ve LITTLE_ENDIAN sabitlerini tanımlar.

compress() ve uncompress() yöntemleri

compress() yöntemi sayesinde bir ByteArray öğesini, parametre olarak belirttiğiniz bir sıkıştırma algoritmasına göre

sıkıştırabilirsiniz. uncompress() yöntemi sayesinde, sıkıştırılmış bir ByteArray öğesini sıkıştırma algoritmasına göre

genişletebilirsiniz. compress() ve uncompress() yöntemlerini çağırdıktan sonra, bayt dizisinin uzunluğu yeni

uzunluğa ve position özelliği sona ayarlanır.

CompressionAlgorithm sınıfı, sıkıştırma algoritmasını belirtmek için kullanabileceğiniz sabitleri tanımlar. AIR, hem

deflate hem de zlib algoritmalarını destekler. deflate sıkıştırma algoritması, zlib, gzip ve bazı zip uygulamaları gibi

birçok sıkıştırma formatında kullanılır. zlib sıkıştırılmış veri formatı http://www.ietf.org/rfc/rfc1950.txt adresinde ve

deflate sıkıştırma algoritması http://www.ietf.org/rfc/rfc1951.txt adresinde anlatılmaktadır.

Aşağıdaki örnek, bytes adındaki ByteArray öğesini deflate algoritması kullanarak sıkıştırır:

bytes.compress(CompressionAlgorithm.DEFLATE);

Aşağıdaki örnek sıkıştırılmış bir ByteArray öğesini deflate algoritması kullanarak genişletir:

Big Endian Big Endian Big Endian Big Endian

a0 a1 a2 a3

31 32 33 34

Little Endian Little Endian Little Endian Little Endian

a0 a1 a2 a3

34 33 32 31

Page 158: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

151ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

bytes.uncompress(CompressionAlgorithm.DEFLATE);

Nesneleri okuma ve nesnelere yazma

readObject() ve writeObject() yöntemleri, serileştirilmiş Action Message Format (AMF) olarak kodlanmış

şekilde ByteArray öğesinden bir nesne okur ve ByteArray öğesine bir nesne yazar. AMF, Adobe tarafından oluşturulan

ve Netstream, NetConnection, NetStream, LocalConnection ve Paylaşılan Nesneleri de içeren çeşitli ActionScript 3.0

sınıfları tarafından kullanılan özel bir mesaj protokolüdür.

Tek baytlı tür işaretleyicisi, ardından gelen kodlanmış verilerin türünü açıklar. AMF aşağıdaki 13 veri türünü kullanır:

value-type = undefined-marker | null-marker | false-marker | true-marker | integer-type | double-type | string-type | xml-doc-type | date-type | array-type | object-type | xml-type | byte-array-type

Kodlanmış veriler, işaretleyici null veya true ya da false gibi, hiçbir verinin kodlanmadığı tek bir olası değer temsil

edene kadar tür işaretleyicisini izler.

AMF'nin iki sürümü vardır: AMF0 ve AMF3. AMF 0, karmaşık nesneleri başvuruya göre göndermeyi destekler ve uç

noktaların nesne ilişkilerini geri yüklemesini sağlar. AMF 3, nesne özelliklerini ve dizeleri nesne başvurularına ek

olarak başvuruya göre göndererek ve ActionScript 3.0 uygulamasında tanıtılan yeni veri türlerini destekleyerek AMF

0'ı iyileştirir. ByteArray.objectEcoding özelliği, nesne verilerinin kodlanmasında kullanılan AMF sürümünü

belirtir. flash.net.ObjectEncoding sınıfı, AMF sürümünü belirtmeye yönelik sabitleri tanımlar:

ObjectEncoding.AMF0 ve ObjectEncoding.AMF3.

import flash.filesystem.*; import flash.utils.ByteArray;

// Label component must be in Library import fl.controls.Label;

var bytes:ByteArray = new ByteArray(); var myLabel:Label = new Label(); myLabel.move(150, 150); myLabel.width = 200; addChild(myLabel); var myXML:XML = <order> <item id='1'> <menuName>burger</menuName> <price>3.95</price> </item> <item id='2'> <menuName>fries</menuName> <price>1.45</price> </item> </order> // Write XML object to ByteArray bytes.writeObject(myXML); bytes.position = 0;//reset position to beginning bytes.compress(CompressionAlgorithm.DEFLATE);// compress ByteArray outFile("order", bytes); myLabel.text = "Wrote order file to desktop!";

Page 159: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

152ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

function outFile(fileName:String, data:ByteArray):void { var outFile:File = File.desktopDirectory; // dest folder is desktop outFile = outFile.resolvePath(fileName); // name of file to write var outStream:FileStream = new FileStream(); // open output file stream in WRITE mode outStream.open(outFile, FileMode.WRITE); // write out the file outStream.writeBytes(data, 0, data.length); // close it outStream.close(); }

readObject() yöntemi, serileştirilmiş AMF'deki bir nesneyi ByteArray öğesinden okur ve belirtilen türde bir nesnede

saklar. Aşağıdaki örnek order dosyasını masaüstünden ByteArray öğesine (inBytes) okur, genişletir ve orderXML

XML nesnesinde saklamak için readObject() öğesini çağırır. Örnek, her düğümü görüntüleme için bir metin alanına

eklemek üzere for each() döngü yapısı kullanır. Örnek ayrıca objectEncoding özelliğinin değerini de, order

dosyasının içeriğine yönelik bir üstbilgiyle birlikte görüntüler.

import flash.filesystem.*; import flash.utils.ByteArray;

// TextArea component must be in Library import fl.controls.TextArea;

var inBytes:ByteArray = new ByteArray(); // define text area for displaying XML content var myTxt:TextArea = new TextArea(); myTxt.width = 550; myTxt.height = 400; addChild(myTxt); //display objectEncoding and file heading myTxt.text = "Object encoding is: " + inBytes.objectEncoding + "\n\n" + "order file: \n\n"; readFile("order", inBytes); inBytes.position = 0; // reset position to beginning inBytes.uncompress(CompressionAlgorithm.DEFLATE); inBytes.position = 0;//reset position to beginning // read XML Object var orderXML:XML = inBytes.readObject(); //for each node in orderXML for each(var child:XML in orderXML) { // append child node to text area myTxt.text += child + "\n"; }

// read specified file into byte array function readFile(fileName:String, data:ByteArray) { var inFile:File = File.desktopDirectory; // source folder is desktop inFile = inFile.resolvePath(fileName); // name of file to read var inStream:FileStream = new FileStream(); inStream.open(inFile, FileMode.READ); inStream.readBytes(data, 0, data.length); inStream.close(); }

Page 160: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

153ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

ByteArray örneği: Bir .zip dosyasını okuma

Bu örnek, farklı türlerde birçok dosya içeren basit bir .zip dosyasının nasıl okunacağını gösterir. Bu işlemi her dosyanın

meta verilerinden ilgili verileri ayıklayarak, her dosyayı bir ByteArray öğesine genişleterek ve dosyayı masaüstüne

yazarak yapar.

Bir .zip dosyasının genel yapısı PKWARE Inc.in belirtimine dayalıdır, bu belirtim

http://www.pkware.com/documents/casestudies/APPNOTE.TXT adresinde bulunmaktadır. İlki, .zip arşivindeki ilk

dosyanın dosya üstbilgisi ve dosya verileridir, ardından her ek dosyanın dosya üstbilgisi ve dosya veri çifti gelir. (Dosya

üstbilgisinin yapısı daha ileride anlatılmaktadır.) İkincisi, .zip dosyası isteğe bağlı olarak bir veri tanımlayıcı kaydı

içerir (genellikle çıktı zip dosyası diske kaydedilmek yerine bellekte oluşturulduğunda). Üçüncü olarak, birçok ilave

isteğe bağlı öğe bulunmaktadır: arşiv şifre çözme üstbilgisi, arşiv ek veri kaydı, merkezi dizin yapısı, Zip64 merkezi

dizin kaydının sonu, Zip64 merkezi dizin bulucunun sonu ve merkezi dizin kaydının sonu.

Bu örnekteki kod yalnızca klasör içermeyen zip dosyalarının ayrıştırılması için yazılmıştır ve veri tanımlayıcı kayıtları

beklemez. Son veri dosyasını izleyen tüm bilgileri yoksayar.

Her dosya için dosya üstbilgi formatı şöyledir:

Dosya üstbilgisinin ardından gerçek dosya verileri gelir, bu veriler sıkıştırma yöntemi bayrağına bağlı olarak

sıkıştırılmış veya sıkıştırılmamış olabilir. Dosya verileri sıkıştırılmamışsa bayrak 0'dır (sıfır), DEFLATE algoritması

kullanılarak sıkıştırılmışsa 8'dir veya diğer sıkıştırma algoritmaları kullanılmışsa başka bir değerdir.

Bu örneğin kullanıcı arabirimi bir etiket ve bir metin alanından oluşur (taFiles). Uygulama aşağıdaki bilgileri .zip

dosyasında karşılaştığı her dosyanın metin alanına yazar: dosya adı, sıkıştırılmış boyut ve sıkıştırılmamış boyut.

Programın başlangıcı aşağıdaki görevleri gerçekleştirir:

• Gerekli sınıfları içeri aktarır

import flash.filesystem.*; import flash.utils.ByteArray; import flash.events.Event;

• Kullanıcı arabirimini tanımlar

dosya üstbilgisi imzası 4 bayt

gerekli sürüm 2 bayt

genel amaçlı bit bayrağı 2 bayt

sıkıştırma yöntemi 2 bayt (8=DEFLATE; 0=SIKIŞTIRILMAMIŞ)

dosyanın son değiştirilme zamanı 2 bayt

dosyanın son değiştirilme tarihi 2 bayt

crc-32 4 bayt

sıkıştırılmış boyut 4 bayt

sıkıştırılmamış boyut 4 bayt

dosya adı uzunluğu 2 bayt

ek alan uzunluğu 2 bayt

dosya adı değişken

ek alan değişken

Page 161: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

154ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

import fl.controls.*; //requires TextArea and Label components in the Library var taFiles = new TextArea(); var output = new Label(); taFiles.setSize(320, 150); taFiles.move(10, 30); output.move(10, 10); output.width = 150; output.text = "Contents of HelloAir.zip"; addChild(taFiles); addChild(output);

• bytes ByteArray öğesini tanımlar

var bytes:ByteArray = new ByteArray();

• Dosya üstbilgisinden meta verileri saklamak için değişkenleri tanımlar

// variables for reading fixed portion of file header var fileName:String = new String(); var flNameLength:uint; var xfldLength:uint; var offset:uint; var compSize:uint; var uncompSize:uint; var compMethod:int; var signature:int;

• .zip dosyasını temsil etmek için File (zfile) ve FileStream (zStream) nesnelerini tanımlar ve dosyaların

ayıklandığı .zip dosyasının konumunu belirtir—masaüstü dizininde “HelloAIR.zip” adlı bir dosya.

// File variables for accessing .zip file var zfile:File = File.desktopDirectory.resolvePath("HelloAIR.zip"); var zStream:FileStream = new FileStream();

Program .zip dosyasını OKUMA modunda açarak başlar.

zStream.open(zfile, FileMode.READ);

Ardından, sayısal alanların bayt sıralamasında en düşük değerli baytın önce geldiğini göstermek için bytes öğesinin

endian özelliğini LITTLE_ENDIAN olarak ayarlar.

bytes.endian = Endian.LITTLE_ENDIAN;

Sonra while() ifadesi, dosya akışındaki geçerli konum dosya boyutundan büyük veya dosya boyutuna eşit olana kadar

devam eden bir döngü başlatır.

while (zStream.position < zfile.size) {

Döngüdeki ilk ifade dosya akışının ilk 30 baytını ByteArray bytes öğesine okur. İlk 30 bayt, ilk dosya üstbilgisinin

sabit boyutlu parçasını oluşturur.

// read fixed metadata portion of local file header zStream.readBytes(bytes, 0, 30);

Sonra kod, 30 baytlık üstbilginin ilk baytlarından bir tam sayı (�mza) okur. ZIP formatı tanımı, her dosya üstbilgi

imzasının onaltılık değer 0x04034b50 olduğunu belirtir; imza farklıysa bu, kodun, .zip dosyasının dosya kısmının

ötesine taşındığı ve ayıklanacak dosya olmadığı anlamına gelir. Bu durumda kod, bayt sırasının sonunu beklemek

yerine hemen while döngüsünden çıkar.

Page 162: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

155ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

bytes.position = 0; signature = bytes.readInt(); // if no longer reading data files, quit if (signature != 0x04034b50) { break; }

Kodun sonraki kısmı üstbilgi baytını uzaklık konumu 8'de okur ve değeri compMethod değişkeninde saklar. Bu bayt,

bu dosyayı sıkıştırmak için kullanılan sıkıştırma yöntemini gösteren bir değer içerir. Birçok sıkıştırma yöntemi

kullanılabilir, ancak uygulamada neredeyse tüm .zip dosyaları DEFLATE sıkıştırma algoritmasını kullanmaktadır.

Geçerli dosya DEFLATE sıkıştırmayla sıkıştırıldıysa compMethod 8'dir; dosya sıkıştırılmamışsa, compMethod 0'dır.

bytes.position = 8; compMethod = bytes.readByte(); // store compression method (8 == Deflate)

İlk 30 baytın ardından, üstbilginin dosya adını ve büyük olasılıkla ek bir alan içeren üstbilginin değişken uzunluklu

kısmı gelir. Değişken offset bu kısmın boyutunu saklar. Boyut, uzaklık 26 ve 28'deki üstbilgilerden okunan dosya adı

uzunluğu ve ek alan uzunluğu toplanarak hesaplanır.

offset = 0;// stores length of variable portion of metadata bytes.position = 26; // offset to file name length flNameLength = bytes.readShort();// store file name offset += flNameLength; // add length of file name bytes.position = 28;// offset to extra field length xfldLength = bytes.readShort(); offset += xfldLength;// add length of extra field

Sonra program offset değişkeninde saklanan bayt sayısı için dosya üstbilgisinin değişken uzunluklu kısmını okur.

// read variable length bytes between fixed-length header and compressed file data zStream.readBytes(bytes, 30, offset);

Program, dosya adını üstbilginin değişken uzunluk kısmından okur ve dosyanın sıkıştırılmış (zip) ve sıkıştırılmamış

(orijinal) boyutlarıyla birlikte metin alanında görüntüler.

bytes.position = 30; fileName = bytes.readUTFBytes(flNameLength); // read file name taFiles.appendText(fileName + "\n"); // write file name to text area bytes.position = 18; compSize = bytes.readUnsignedInt(); // store size of compressed portion taFiles.appendText("\tCompressed size is: " + compSize + '\n'); bytes.position = 22; // offset to uncompressed size uncompSize = bytes.readUnsignedInt(); // store uncompressed size taFiles.appendText("\tUncompressed size is: " + uncompSize + '\n');

Örnek, dosyanın geri kalanını sıkıştırılmış boyut tarafından belirtilen uzunluk için dosya akışından bytes öğesine

okur ve ilk 30 bayttaki dosya üstbilgisinin üzerine yazar. Dosya sıkıştırılmış olmasa bile sıkıştırılmış boyut doğrudur,

çünkü bu durumda sıkıştırılmış boyut dosyanın sıkıştırılmamış boyutuna eşittir.

// read compressed file to offset 0 of bytes; for uncompressed files // the compressed and uncompressed size is the same zStream.readBytes(bytes, 0, compSize);

Sonra örnek, sıkıştırılmış dosyayı genişletir ve çıktı dosyası akışına yazmak için outfile() işlevini çağırır. outfile()

öğesine dosya verilerini içeren dosya adını ve bayt sırasını iletir.

Page 163: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

156ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Bayt dizileriyle çalışma

if (compMethod == 8) // if file is compressed, uncompress { bytes.uncompress(CompressionAlgorithm.DEFLATE); } outFile(fileName, bytes); // call outFile() to write out the file

Kapatma ayracı, outFile() yöntemi haricinde while döngüsünün ve uygulama kodunun sonunu gösterir. Çalıştırma

while döngüsünün başlangıcına kadar geriye doğru ilerler ve başka bir dosyayı ayıklayarak veya son dosya işlenmişse

.zip dosyasını işlemeyi sonlandırarak .zip dosyasında bulunan sonraki baytları işlemeye devam eder.

} // end of while loop

outfile() işlevi bir çıktı dosyasını, dosyaya filename parametresi tarafından sağlanan ismi vererek masaüstünde

YAZMA modunda açar. Ardından data parametresindeki dosya verilerini çıktı dosyası akışına (outStream) yazar ve

dosyayı kapatır.

function outFile(fileName:String, data:ByteArray):void { var outFile:File = File.desktopDirectory; // destination folder is desktop outFile = outFile.resolvePath(fileName); // name of file to write var outStream:FileStream = new FileStream(); // open output file stream in WRITE mode outStream.open(outFile, FileMode.WRITE); // write out the file outStream.writeBytes(data, 0, data.length); // close it outStream.close(); }

Page 164: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

157

Bölüm 18: Yerel SQL veritabanlarıyla çalışma

Adobe AIR, yerel SQL veritabanları oluşturma ve bu veritabanlarıyla çalışma özelliğini içerir. Çalışma zamanı, açık

kaynak SQLite veritabanı sistemini kullanarak birçok standart SQL özelliğini destekleyen bir SQL veritabanı motoru

içerir. Yerel bir SQL veritabanı, yerel, kalıcı verileri saklamak için kullanılabilir. Örneğin, uygulamanızın yerel olarak

saklamasını isteyebileceğiniz uygulama verileri, uygulama kullanıcı ayarları, belgeler veya diğer türlerdeki veriler için

kullanılabilir.

Yerel SQL veritabanları hakkında ek çevrimiçi bilgi

Yerel SQL veritabanlarıyla çalışma hakkında daha fazla bilgiyi şu kaynaklardan bulabilirsiniz:

Hızlı Başlangıçlar (Adobe AIR Geliştirici Bağlantısı)

Dil Başvurusu

• SQLCollationType

• SQLColumnNameStyle

• SQLColumnSchema

• SQLConnection

• SQLError

• SQLErrorEvent

• SQLErrorOperation

• SQLEvent

• SQLIndexSchema

• SQLMode

• SQLResult

• SQLSchema

• SQLSchemaResult

• SQLStatement

• SQLTableSchema

• SQLTransactionLockType

• SQLTriggerSchema

• SQLUpdateEvent

• SQLViewSchema

Adobe Geliştirici Bağlantısı Makaleleri ve Örnekleri

• Flash için Adobe AIR Geliştirici Bağlantısı (ara: ‘AIR SQL’)

Page 165: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

158ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Yerel SQL veritabanları hakkında

Adobe AIR, AIR uygulamasının çalıştığı bilgisayardaki veritabanı dosyalarında yerel olarak saklanan verileri içeren

çalışma zamanında çalışan SQL tabanlı ilişkisel bir veritabanı motoru içerir (örneğin, bilgisayarın sabit sürücüsünde).

Veritabanı yerel olarak çalıştığı ve veri dosyaları yerel olarak saklandığı için, bir veritabanı AIR uygulaması tarafından

ağ bağlantısının kullanılabilir olup olmadığına bakılmaksızın kullanılabilir. Bu nedenle, çalışma zamanının yerel SQL

veritabanı motoru, özellikle SQL ve ilişkisel veritabanlarlarına ilişkin deneyiminiz varsa, kalıcı, yerel uygulama

verilerinin saklanması için uygun bir mekanizma sağlar

Yerel SQL veritabanları için kullanımlar

AIR yerel SQL veritabanı işlevi, uygulama verilerini kullanıcının yerel bilgisayarında saklamak isteyebileceğiniz tüm

amaçlar için kullanılabilir. Adobe AIR, verilerin yerel olarak saklanması için, her biri farklı avantajlara sahip çeşitli

mekanizmalar içerir. AIR uygulamanızdaki yerel SQL veritabanı için bazı olası kullanımlar şunlardır:

• Veritabanı, veri odaklı bir uygulama (örneğin bir adres defteri) için ana uygulama verilerini saklamak amacıyla

kullanılabilir.

• Kullanıcıların kaydetmek ve belki de paylaşmak için belgeler oluşturduğu belge odaklı uygulamalar için, belgeler

kullanıcının belirlediği konumda bir veritabanı dosyası olarak kaydedilebilir. (Ancak, herhangi bir AIR

uygulamasının veritabanı dosyasını açabileceğini göz önünde bulundurun. Bu nedenle, önemli olabilecek belgeler

için şifreleme mekanizması önerilir.)

• Veritabanı, ağ kullanan bir uygulama için uygulama verilerinin yerel önbelleğini saklamak veya ağ bağlantısı

kullanılabilir olmadığında verileri geçici olarak saklamak üzere kullanılabilir. Yerel veritabanını ağ veri deposuyla

senkronize etmek için bir mekanizma oluşturabilirsiniz.

• Veritabanı, herhangi bir uygulama için tek bir kullanıcının uygulama ayarlarını, örneğin pencere boyutu ve

konumu gibi kullanıcı seçenekleri ve uygulama bilgisini saklamak üzere kullanılabilir.

AIR veritabanları ve veritabanı dosyaları hakkında

Tek bir Adobe AIR yerel SQL veritabanı, bilgisayarın dosya sisteminde tek bir dosya olarak saklanır. Çalışma zamanı,

veritabanı dosyalarının oluşturulup yapılandırılmasını, verilerin bir veritabanı dosyasından alınması ve

değiştirilmesini yöneten bir SQL veritabanı motoru içerir. Çalışma zamanı, veritabanı verilerinin dosya sisteminin

neresinde ve nasıl saklandığını belirtmez; bunun yerine, her veritabanının tamamı tek bir dosyada saklanır. Veritabanı

dosyasının saklandığı dosya ssitemindeki konumu siz belirlersinz. Tek bir AIR uygulaması bir veya daha çok ayrı

veritabanına erişebilir (bunlar, ayrı veritabanı dosyalarıdır). Çalışma zamanı her veritabanını dosya sisteminde tek bir

dosya olarak sakladığından, veritabanınızı uygulamanızın tasarımının ve işletim sistemi dosya erişim sınırlamalarının

gerektirdiği şekilde konumlandırabilirsiniz. Her kullanıcı, özel verileri için ayrı bir veritabanı dosyasına sahiptir veya

paylaşılan veriler için tek bir bilgisayardaki tüm uygulama kullanıcıları veritabanı dosyasına erişebilir. Veriler tek bir

bilgisayar için yerel olduğundan, farklı bilgisayarlardaki kullanıcılar tarafından otomatik olarak paylaşılmaz. Yerel

SQL veritabanı motoru, uzak veya sunucu tabanlı bir veritabanına karşı SQL ifadelerinin yürütülmesi için herhangi bir

özellik sağlamaz.

İlişkisel veritabanları hakkında

İlişkisel veritabanı, verilerin bir bilgisayarda saklanmasına (ve geri alınmasına) yönelik bir mekanizmadır. Veriler,

tablolar halinde düzenlenir: satırlar kayıtları veya öğeleri temsil eder ve sütunlar (bazen “alanlar” da denir) her kaydı

ayrı ayrı değerlere böler. Örneğin, adres defteri uygulaması bir “arkadaşlar” tablosu içerebilir. Tablodaki her satır,

veritabanında saklanan tek bir arkadaşı temsil edecektir. Tablonun sütunları, ad, soyad, doğum tarihi vb. gibi verileri

temsil eder. Veritabanı, tablodaki her arkadaş satırına ilişkin her sütun için ayrı bir değer saklar.

Page 166: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

159ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

İlişkisel veritabanları, bir öğenin başka türden öğelerle ilişkilendirilmiş veya başka türden öğelerle olduğu karmaşık

verilerin saklanması için tasarlanmıştır. İlişkisel bir veritabanında, bire çok ilişkiye sahip —tek bir kaydın farklı türdeki

birden çok kayıtla ilişkilendirilebildiği —veriler farklı tablolar halinde bölümlenmelidir. Örneğin, adres defteri

uygulamanızın her arkadaş için birden çok telefon numarası saklamasını istediğinizi varsayın; bu, bire çok ilişkidir.

“Arkadaşlar” tablosu, her arkadaş için tüm kişisel bilgileri içerecektir. Ayrı bir “telefon numaraları” tablosu, tüm

arkadaşlara ilişkin tüm telefon numaralarını içerir.

Arkadaşlara ve telefon numaralarına ilişkin verileri saklamanın yanı sıra, her tablo, iki tablo arasındaki ilişkiyi izlemek

için—ayrı ayrı arkadaş kayıtlarını telefon numaralarıyla eşlemek için bir veri parçasına ihtiyaç duyacaktır. Bu veri, ana

anahtar—tablodaki her satırı bu tablodaki diğer satırlardan ayırt eden benzersiz bir kimlik olarak bilinir. Ana anahtar,

tablodaki her kaydı doğal olarak ayırt eden veri öğelerinden biri olduğu anlamına gelen “doğal anahtar” olabilir. Hiçbir

arkadaşınızın aynı doğum tarihini paylaşmadığını biliyorsanız, “arkadaşlar” tablosunda doğum tarihi sütununu ana

anahtar (doğal anahtar) olarak kullanabilirsiniz. Doğal anahtar yoksa, “arkadaş kimliği”—uygulamanın satırları ayırt

etmek için kullanacağı yapay bir değer gibi ayrı bir ana anahtar sütunu oluşturabilirsiniz.

Ana anahtarı kullanarak birden çok tablo arasında ilişkiler kurabilirsiniz. Örneğin, “arkadaşlar” tablosunun her satır

(her arkadaş) için benzersiz bir numara içeren bir “arkadaş kimliği” sütununa sahip olduğunu düşünün. İlgili “telefon

numaraları” tablosu, iki sütunla yapılandırılabilir: telefon numarasının ait olduğu arkadaşın “arkadaş kimliği” bilgisini

içeren sütun ve geçerli telefon numarasını içeren sütun. Bu şekilde, tek bir arkadaş kaç telefon numarasına sahip olursa

olsun, bunların tümü “telefon numaraları tablosunda saklanabilir ve “arkadaş kimliği” ana anahtarı kullanılarak ilgili

arkadaşa bağlanabilir. Bir tablodaki ana anahtar, ilgili bir tabloda kayıtlar arasındaki bağlantıyı belirtmek üzere

kullanıldığında, ilgili tablodaki değer yabancı anahtar olarak bilinir. Birçok veritabanıın aksine, AIR yerel veritabanı

motoru, eklenen veya güncellenen yabancı anahtara ana anahtar tablosunda karşılık gelen bir satırın bululup

bulunmadığını otomatik olarak kontrol eden sınırlamalar olan yabancı anahtar sınırlamaları oluşturmanıza olanak

vermez. Yine de, yabancı anahtar ilişkileri ilişkisel veritabanı yapısının önemli bir parçasıdır ve veritabanınızdaki

tablolar arasında ilişki oluştururken yabancı anahtarlar kullanılmalıdır.

SQL hakkında

Yapılandırılmış Sorgu Dili (Structured Query Language - SQL) verileri değiştirmek ve getirmek için ilişkisel

veritabanlarıyla kullanılır. SQL, yordam temelli bir dilden çok, tanımlayıcı bir dildir. Bir SQL ifadesi, verilerin nasıl

getirileceğine ilişkin bilgisayar talimatları vermek yerine, istediğiniz veri kümesini açıklar. Veritabanı motoru,

verilerin nasıl getirileceğini belirler.

SQL dili, American National Standards Institute (ANSI) tarafından standartlaştırılmıştır. Adobe AIR yerel SQL

veritabanı SQL-92 standardının büyük bölümünü destekler. Adobe AIR'de desteklenen SQL dilinin özel açıklamaları

için bkz. ActionScript 3.0 Dil ve Bileşenler Başvurusu linkindeki “Yerel veritabanlarında SQL desteği“ eki.

SQL veritabanları sınıfları hakkında

ActionScript 3.0'da yerel SQL veritabanlarıyla çalışmak için bu sınıfların flash.data paketindeki örneklerini

kullanırsınız:

Sınıf Açıklama

flash.data.SQLConnection Veritabanları (veritabanı dosyaları) oluşturma ve açmaya yönelik yolların yanı sıra, veritabanı düzeyinde

işlemler gerçekleştirmek ve veritabanı işlemlerini denetlemek için yöntemler sağlar.

flash.data.SQLStatement İfade metninin tanımlanması ve parametre değerlerinin ayarlanması dahil, veritabanında yürütülen tek bir

SQL ifadesini (tek bir sorgu veya komut) temsil eder.

flash.data.SQLResult SELECT ifadesinden sonuç satırları, UPDATE veya DELETE ifadesinden etkilenen bir dizi satır vb. ifadelerin

yürütülmesinden doğan sonuçların ve bu yürütmelere ilişkin bilgilerin getirilmesi için bir yol sağlar

Page 167: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

160ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Veritabanı yapısını açıklayan şema bilgilerini elde etmek için flash.data paketindeki şu sınıfları kullanırsınız:

flash.data paketindeki diğer sınıflar, SQLConnection sınıfı ve SQLColumnSchema sınıfıyla kullanılan sabitleri sağlar:

Ayrıca, flash.events paketinde bulunan aşağıdaki sınıflar kullandığınız olayları (ve desteklenen sabitleri) temsil eder:

Son olarak, flash.errors paketinde yer alan aşağıdaki sınıflar, veritabanı işlem hataları hakkında bilgi sağlar:

Senkronize ve senkronize olmayan yürütme modları hakkında

Yerel SQL veritabanıyla çalışmak üzere bir kod yazdığınızda, bu veritabanı işlem yürütmesini iki yürütme modundan

birinde belirlersiniz: senkronize olmayan veya senkronize yürütme modu. Kod örnekleri genellikle ihtiyaçlarınıza en

uygun olan örneği kullanabilmeniz için, her bir işlemin her iki yolla da nasıl gerçekleştirileceğini gösterir.

Sınıf Açıklama

flash.data.SQLSchemaResult SQLConnection.loadSchema() yönteminin çağrılmasıyla oluşan veritabanı şeması sonuçları için

konteyner görevi yapar.

flash.data.SQLTableSchema Veritabanındaki tek bir tabloyu açıklayan bilgiyi sağlar.

flash.data.SQLViewSchema Veritabanındaki tek bir görünümü açıklayan bilgiyi sağlar.

flash.data.SQLIndexSchema Veritabanındaki tek bir tablo veya görünüm sütununu açıklayan bilgiyi sağlar.

flash.data.SQLTriggerSchema Veritabanındaki tek bir tetikleyiciyi açıklayan bilgiyi sağlar.

Sınıf Açıklama

flash.data.SQLMode SQLConnection.open() ve SQLConnection.openAsync() yöntemlerinin openMode

parametresi için olası değerleri temsil eden bir dizi sabiti tanımlar.

flash.data.SQLColumnNameStyle SQLConnection.columnNameStyle özelliği için olası değerleri temsil eden bir dizi sabiti tanımlar.

flash.data.SQLTransactionLockType SQLConnection.begin() yönteminin seçenek parametresi için olası değerleri temsil eden bir dizi

sabiti tanımlar.

flash.data.SQLCollationType SQLColumnSchema() yapıcısının SQLColumnSchema.defaultCollationType özelliği ve

defaultCollationType parametresi için olası değerleri temsil eden bir dizi sabiti tanımlar.

Sınıf Açıklama

flash.data.SQLEvent İşlemlerinden herhangi biri başarıyla yürütüldüğünde SQLConnection veya SQLStatement örneklerinin

gönderdiği olayları tanımlar. Her işlem, SQLEvent sınıfında tanımlanmış, ilişkili bir olay türüne sahiptir.

flash.data.SQLErrorEvent İşlemlerinden herhangi biri hatayla sonuçlandığında, SQLConnection veya SQLStatement örneklerinin

gönderdiği olayı tanımlar.

flash.data.SQLUpdateEvent Bağlı veritabanlarından birinde yer alan tablo verileri, yürütülen bir INSERT, UPDATE veya DELETE SQL

ifadesinin sonucu olarak değiştiğinde SQLConnection örneğinin gönderdiği olayı tanımlar.

Sınıf Açıklama

flash.data.SQLError Gerçekleştirilmeye çalışıklan işlem ve hatanın nedeni dahil, veritabanı işlem hatası hakkında bilgi sağlar.

flash.data.SQLErrorEvent Hatayla sonuçlanan veritabanı işlemini gösteren SQLError sınıfının operation özelliği için olası değerleri

temsil eden bir dizi sabiti tanımlar.

Page 168: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

161ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Senkronize olmayan yürütme modunda, çalışma zamanına bir talimat verirsiniz ve istediğiniz işlem tamamlandığında

veya başarısız olduğunda çalışma zamanı bir olay gönderir. Önce veritabanı motoruna bir işlem gerçekleştirmesini

söylersiniz. Uygulama çalışmaya devam ederken, veritabanı motoru işini arka planda yapar. Son olarak, veritabanı

motoru işlem tamamlandığında (veya başarısız olduğunda) bir olay gönderir. Olay tarafından tetiklenen kodunuz,

sonraki işlemleri gerçekleştirir. Bu yaklaşımın önemli bir faydası vardır: ana uygulama kodu çalışmaya devam ederken,

çalışma zamanı veritabanı işlemlerini arka planda gerçekleştirir. Veritabanı işlemi büyük ölçüde zaman alırsa,

uygulama çalışmaya devam eder. En önemlisi, kullanıcı ekranı dondurmadan uygulamayla etkileşim kurmaya devam

edebilir. Yine de, senkronize olmayan işlem kodunun yazılması diğer kodlara göre daha karmaşık olabilir. Bu

karmaşıklık, genellikle çoklu bağımlı işlemlerin çeşitli olay dinleyici yöntemlerine bölümlenmesi gerektiği durumlarda

mevcuttur.

Kavramsal olarak, işlemleri birkaç olay dinleyici yöntemine bölünmüş bir işlem kümesi yerine, tek bir adım sırası—bir

senkronize işlemler kümesi—olarak kodlamak daha kolaydır. Senkronize olmayan veritabanı işlemlerine ek olarak,

Adobe AIR veritabanı işlemlerini senkronize olarak yürütmenize de olanak verir. Senkronize yürütme modunda,

işlemler arka planda çalışmaz. Bunun yerine, diğer tüm uygulama kodları gibi aynı yürütme sırasında çalışır.

Veritabanı motoruna bir işlem gerçekleştirmesini söylersiniz. Daha sonra, veritabanı motoru işini yaparken, kod bu

noktada duraklar. İşlem tamamlandığında, yürütme sonraki kod satırıyla devam eder.

İşlemlerin senkronize olmayan veya senkronize biçimde yürütüleceği, SQLConnection düzeyinde ayarlanır. Tek bir

veritabanı bağlantısı kullanarak bazı işlemler ve ifadeleri senkronize, diğerlerini senkronize olmayan biçimde

yürütemezsiniz. Veritabanını açmak için SQLConnection yöntemini çağırarak, SQLConnection öğesinin senkronize

veya senkronize olmayan yürütme modunda çalışacağını belirlersiniz. SQLConnection.open() yöntemini

çağırırsanız, bağlantı senkronize yürütme modunda, SQLConnection.openAsync() yöntemini çağırırsanız

senkronize olmayan yürütme modunda çalışır. SQLConnection örneği, open() veya openAsync() kullanılarak bir

veritabanına bağlandığında, veritabanı bağlantısını kapatıp açmadığınız sürece, senkronize veya senkronize olmayan

yürütme moduna sabitlenir.

Her yürütme modunun kendi faydaları vardır. Modların çoğu yönü birbirine benzese de, her bir modda çalışırken

aklınızda bulundurmak isteyeceğiniz bazı farklar vardır. Bu başlıklar hakkında daha fazla bilgi ve her bir modda

çalışmaya ilişkin öneriler için bkz. “Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma” sayfa 181.

Veritabanı oluşturma ve değiştirme

Uygulamanızın verileri ekleyebilmesi ve getirebilmesi için, uygulamanızın erişebileceği, içinde tanımlanmış tablolar

bulunan bir veritabanı gereklidir. Burada, bir veritabanı oluşturma ve bir veritabanı içindeki veri yapısını oluşturmaya

ilişkin görevler tanımlanmıştır. Bu görevler veri ekleme ve veri getirmeden daha az kullanılsa da, çoğu uygulama için

gereklidir.

Veritabanı oluşturma

Bir veritabanı dosyası oluşturmak için, önce bir SQLConnection örneği oluşturursunuz. Bunu senkronize yürütme

modunda açmak için open() yöntemini veya senkronize olmayan yürütme modunda açmak için openAsync()

yöntemini çağırırsınız. open() ve openAsync() yöntemleri, bir veritabanı bağlantısını açmak için kullanılır.

reference parametresine (ilk parametre) ilişkin var olmayan bir dosyaya başvuran bir File örneği ilettiğinizde,

open() veya openAsync() yöntemi bu dosya konumunda bir veritasbanı dosyası oluşturur ve yeni oluşturulan

veritabanına bağlantı kurar.

Page 169: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

162ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Veritabanı oluşturmak için open() veya openAsync() yöntemlerinden hangisini çağırırsanız çağırın, veritabanı

dosyasının adı herhangi bir dosya uzantısına sahip herhangi bir geçerli ad olabilir. Ba�vuru parametresi için null

değeriyle open() veya openAsync() yöntemini çağırdığınızda, diskteki bir veritabanı dosyası yerine yeni bir bellek içi

veritabanı oluşturulur.

Aşağıdaki kod listesi, senkronize yürütme modu yoluyla bir veritabanı dosyası (yeni bir veritabanı) oluşturma işlemini

gösterir. Bu durumda, veritabanı dosyası uygulamanın depo dizinine “DBSample.db” dosya adıyla kaydedilir:

import flash.data.SQLConnection; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; import flash.filesystem.File; var conn:SQLConnection = new SQLConnection(); conn.addEventListener(SQLEvent.OPEN, openHandler); conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); conn.openAsync(dbFile); function openHandler(event:SQLEvent):void {

trace("the database was created successfully"); } function errorHandler(event:SQLErrorEvent):void {

trace("Error message:", event.error.message); trace("Details:", event.error.details);

}

SQLConnection örneğiyle bir veritabanı bağlantısını açtığınızda, işlemleri senkronize olarak yürütmek için open()

yöntemini çağırın. Aşağıdaki örnek, işlemlerini senkronize olarak yürüten bir SQLConnection örneğinin nasıl

oluşturulacağını ve açılacağını gösterir:

import flash.data.SQLConnection; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; import flash.filesystem.File; var conn:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); try {

conn.open(dbFile); trace("the database was created successfully");

} catch (error:SQLError) {

trace("Error message:", error.message); trace("Details:", error.details);

}

Veritabanı tabloları oluşturma

Veritabanında bir tablo oluşturma, bir SQL ifadesini yürütmek için kullandığınız SELECT, INSERT vb. gibi bir işlemin

aynısını kullanarak bu veritabanında bir SQL ifadesi yürütmeyi içerir. Tablo oluşturmak için, sütun tanımlarını ve yeni

tabloya ilişkin sınırlamaları içeren CREATE TABLE ifadesini kullanırsınız. SQL ifadelerini yürütme hakkında daha fazla

bilgi için bkz. “SQL ifadeleriyle çalışma” sayfa 166.

Page 170: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

163ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Aşağıdaki örnek, var olan bir veritabanı dosyasında senkronize olmayan yürütme modunu kullanarak “çalışanlar” adlı

bir tablo oluşturmayı gösterir. Bu kodun önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir

SQLConnection örneğinin var olduğunu varsaydığını unutmayın.

import flash.data.SQLConnection; import flash.data.SQLStatement; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; // ... create and open the SQLConnection instance named conn ... var createStmt:SQLStatement = new SQLStatement(); createStmt.sqlConnection = conn; var sql:String =

"CREATE TABLE IF NOT EXISTS employees (" + " empId INTEGER PRIMARY KEY AUTOINCREMENT, " + " firstName TEXT, " + " lastName TEXT, " + " salary NUMERIC CHECK (salary > 0)" + ")";

createStmt.text = sql; createStmt.addEventListener(SQLEvent.RESULT, createResult); createStmt.addEventListener(SQLErrorEvent.ERROR, createError); createStmt.execute(); function createResult(event:SQLEvent):void {

trace("Table created"); } function createError(event:SQLErrorEvent):void {

trace("Error message:", event.error.message); trace("Details:", event.error.details);

}

Aşağıdaki örnek, var olan bir veritabanı dosyasında senkronize yürütme modunu kullanarak “çalışanlar” adlı bir

tablonun nasıl oluşturulacağını gösterir. Bu kodun önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir

SQLConnection örneğinin var olduğunu varsaydığını unutmayın.

Page 171: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

164ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

import flash.data.SQLConnection; import flash.data.SQLStatement; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; // ... create and open the SQLConnection instance named conn ... var createStmt:SQLStatement = new SQLStatement(); createStmt.sqlConnection = conn; var sql:String =

"CREATE TABLE IF NOT EXISTS employees (" + " empId INTEGER PRIMARY KEY AUTOINCREMENT, " + " firstName TEXT, " + " lastName TEXT, " + " salary NUMERIC CHECK (salary > 0)" + ")";

createStmt.text = sql; try {

createStmt.execute(); trace("Table created");

} catch (error:SQLError) {

trace("Error message:", error.message); trace("Details:", error.details);

}

SQL veritabanı verilerini değiştirme

Yerel SQL veritabanlarıyla çalışırken gerçekleştirmeniz gereken bazı genel görevler vardır. Bu görevler, veritabanına

bağlanma, veritabanındaki tablolara veri ekleme ve bu tablolardan veri almayı içerir. Ayrıca, veri türleriyle çalışma ve

hataları işleme gibi, bu görevleri gerçekleştirirken aklınızda bulundurmak isteyeceğiniz birkaç konu mevcuttur.

Bunun yanı sıra, daha az ilgileneceğiniz, ancak bu yaygın görevleri gerçekleştirmeden önce ilgilenmeniz gereken birkaç

veritabanı görevi vardır. Örneğin, veritabanına bağlanmadan ve bir tablodan veri almadan önce, veritabanı

oluşturmanız ve bu veritabanında veri yapısı oluşturmanız gerekecektir. Bu daha nadir başlangıç kurulum görevleri

“Veritabanı oluşturma ve değiştirme” sayfa 161 bölümünde tartışılır.

Veritabanı işlemlerini senkronize olmayan biçimde gerçekleştirmeyi, yani veritabanı motorunun arka planda

çalışmasını ve işlem başarıyla tamamlandığında veya başarısız olduğunda bir olay göndererek sizi bilgilendirmesini

seçebilirsiniz. Bu işlemleri senkronize olarak da gerçekleştirebilirsiniz. Bu durumda veritabanı işlemleri ardarda

gerçekleştirilir ve tüm uygulama (ekrana güncellemeler dahil) diğer kodun yürütülmesinden önce işlemlerin

tamamlanmasını bekler. Bu bölümdeki örnekler, işlemlerin senkronize olmayan ve senkronize biçimde nasıl

gerçekleştirileceğini gösterir. Senkronize olmayan ve senkronize yürütme modunda çalışma hakkında daha fazla bilgi

için bkz. “Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma” sayfa 181.

Veritabanına bağlanma

Herhangi bir veritabanı işlemini gerçekleştirmeden önce, bir veritabanı dosyası bağlantısı açın. SQLConnection

örneği, bir veya daha çok veritabanına bağlantıyı temsil etmek üzere kullanılır. SQLConnection örneği kullanılarak

bağlanılan ilk veritabanı, “ana” veritabanı olarak bilinir. Bu veritabanına open() yöntemi (senkronize yürütme modu

için) veya openAsync() yöntemi (senkronize olmayan yürütme modu için) kullanılarak bağlanılır.

Page 172: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

165ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Senkronize olmayan openAsync() işlemini kullanarak bir veritabanına bağlandığınızda, openAsync() işleminin ne

zaman tamamlandığını bilmek için SQLConnection örneğinin open olayına kaydolun. İşlemin başarısız olup

olmadığını belirlemek için SQLConnection örneğinin error olayına kaydolun.

Aşağıdaki örnek, senkronize olmayan yürütme için var olan bir veritabanı dosyasının nasıl açılacağını gösterir.

Veritabanı dosyası “DBSample.db” adındadır ve kullanıcının uygulama depo dizininde bulunur.

import flash.data.SQLConnection; import flash.data.SQLMode; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; import flash.filesystem.File; var conn:SQLConnection = new SQLConnection(); conn.addEventListener(SQLEvent.OPEN, openHandler); conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); conn.openAsync(dbFile, SQLMode.UPDATE); function openHandler(event:SQLEvent):void {

trace("the database opened successfully"); } function errorHandler(event:SQLErrorEvent):void {

trace("Error message:", event.error.message); trace("Details:", event.error.details);

}

Aşağıdaki örnek, senkronize yürütme için var olan bir veritabanı dosyasının nasıl açılacağını gösterir. Veritabanı

dosyası “DBSample.db” adındadır ve kullanıcının uygulama depo dizininde bulunur.

import flash.data.SQLConnection; import flash.data.SQLMode; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; import flash.filesystem.File; var conn:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); try {

conn.open(dbFile, SQLMode.UPDATE); trace("the database opened successfully");

} catch (error:SQLError) {

trace("Error message:", error.message); trace("Details:", error.details);

}

Senkronize olmayan örnekteki openAsync() yöntemi çağrısı ve senkronize örnekteki open() yöntemi çağrısında

ikinci argümanın SQLMode.UPDATE sabiti olduğunu unutmayın. İkinci parametre (openMode) için SQLMode.UPDATE

öğesinin belirlenmesi, belirtilen dosya mevcut değilse çalışma zamanının bir hata göndermesine neden olur. openMode

parametresi için SQLMode.CREATE iletirseniz (veya openMode parametresini bırakırsanız), belirtilen dosya mevcut

değilse çalışma zamanı bir veritabanı dosyası oluşturmaya çalışır. Var olan bir veritabanını salt okunur modda açmak

üzere, openMode parametresi için SQLMode.READ de belirleyebilirsiniz. Bu durumda veriler veritabanından alınabilir,

ancak veriler eklenemez, silinemez veya değiştirilemez.

Page 173: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

166ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

SQL ifadeleriyle çalışma

Tek bir SQL ifadesi (sorgu veya komut) çalışma zamanında bir SQLStatement nesnesi olarak temsil edilir. Bir SQL

ifadesi oluşturmak ve yürütmek için şu adımları takip edin:

SQLStatement örneği oluşturur.

SQLStatement nesnesi, uygulamanızdaki SQL ifadesini temsil eder.

var selectData:SQLStatement = new SQLStatement();

Veritabanının hangi sorguya karşı çalıştığını belirtin.

Bunu yapmak için, SQLStatement nesnesinin sqlConnection özelliğini istenen veritabanıyla bağlantışı olan

SQLConnection örneğine ayarlayın.

// A SQLConnection named "conn" has been created previously selectData.sqlConnection = conn;

Geçerli SQL ifadesini belirtin.

İfade metnini bir Dize olarak oluşturun ve SQLStatement örneğinin text özelliğine atayın.

selectData.text = "SELECT col1, col2 FROM my_table WHERE col1 = :param1";

Yürütme işleminin sonucunu işlemek için işlevleri tanımlayın (yalnızca senkronize olmayan yürütme modu).

İşlevleri SQLStatement örneğinin result ve error olayları olarak kaydetmek için addEventListener() yöntemini

kullanın.

// using listener methods and addEventListener(); selectData.addEventListener(SQLEvent.RESULT, resultHandler); selectData.addEventListener(SQLErrorEvent.ERROR, errorHandler); function resultHandler(event:SQLEvent):void {

// do something after the statement execution succeeds } function errorHandler(event:SQLErrorEvent):void {

// do something after the statement execution fails }

Alternatif olarak, Responder nesnesini kullanarak dinleyici yöntemleri belirleyebilirsiniz. Bu durumda Responder

örneğini oluşturur ve dinleyici yöntemlerini bu örneğe bağlarsınız.

// using a Responder (flash.net.Responder) var selectResponder = new Responder(onResult, onError); function onResult(result:SQLResult):void {

// do something after the statement execution succeeds } function onError(error:SQLError):void {

// do something after the statement execution fails }

İfade metni parametre tanımları içeriyorsa, bu parametreler için değer atayın.

Parametre değerleri atamak için, SQLStatement örneğinin parameters ilişkilendirici dizi özelliğini kullanın.

selectData.parameters[":param1"] = 25;

Page 174: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

167ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

SQL ifadesini yürütün.

SQLStatement örneğinin execute() yöntemini çağırın.

// using synchronous execution mode // or listener methods in asynchronous execution mode selectData.execute();

Ayrıca, senkronize olmayan yürütme modunda olay dinleyicileri yerine Responder kullanıyorsanız, Responder

örneğini execute() yöntemine iletin.

// using a Responder in asynchronous execution mode selectData.execute(-1, selectResponder);

Bu adımları gösteren belirli örnekler için şu başlıklara bakın:

“Bir veritabanından veri alma” sayfa 169

“Veri ekleme” sayfa 174

“Verileri değiştirme veya silme” sayfa 177

İfadelerde parametreler kullanma

Bir SQL ifade parametresi, yeniden kullanılabilir bir SQL ifadesi oluşturmanıza olanak verir. İfade parametreleri

kullandığınızda, ifadenin içindeki değerler değişebilir (bir INSERT ifadesine eklenen değerler gibi), ancak temel ifade

metni aynı kalır. Bu, uygulamanın kodlanmasını kolaylaştırdığı gibi, performansa ilişkin faydalar da sağlar.

İfade parametrelerini anlama

Bir uygulama genellikle tek bir SQL ifadesini bir uygulamada küçük değişimlerle birçok kez kullanır. Örneğin,

kullanıcının veritabanına yeni stok kalemleri ekleyebildiği bir stok izleme uygulaması düşünün. Veritabanına yeni bir

stok kalemi ekleyen uygulama kodu, veriyi veritabanına gerçekten ekleyen bir SQL INSERT ifadesini yürütür. Ancak,

ifade her yürütüldüğünde, küçük bir değişime uğrar. Özellikle, tabloya eklenen gerçek değerler farklıdır, çünkü bu

değerler eklenen stok kalemine özgüdür.

İfadede farklı değerlerle birçok kez kullanılan bir SQL ifadenizin olduğu durumlarda en iyi yaklaşım, SQL metninde

değişmez değerler yerine parametreler içeren bir SQL ifadesi kullanmaktır. Bir parametre, ifade her yürütüldüğünde

geçerli bir değerle değiştirilen ifade metnindeki yer tutucudur. SQL ifadesinde parametreler kullanmak için, normal

şekilde bir SQLStatement örneği oluşturursunuz. Text özelliğine atanan geçerli SQL ifadesi için değişmez değerler

yerine parametre yer tutucuları kullanın. SQLStatement örneğinin parameters özelliğindeki öğenin değerini

ayarlayarak, her parametreye ilişkin değeri tanımlayabilirsiniz. Parameters özelliği ilişkilendirici bir dizidir, bu

nedenle aşağıdaki sözdizimini kullanarak belirli bir değer ayarlarsınız:

statement.parameters[parameter_identifier] = value;

Parameter_identifier, adlandırılmış bir parametre kullanıyorsanız bir dize, adlandırılmamış bir parametre

kullanıyorsanız bir tam sayı dizinidir.

Adlandırılmış parametreleri kullanma

Parametre, adlandırılmış bir parametre olabilir. Adlandırılmış bir parametre, veritabanının parametre değerini ifade

metnindeki yer tutucu konumuna eşlemek için kullandığı belirli bir ada sahiptir. Bir parametre adı, aşağıdaki

örneklerdeki gibi arkasından bir ad gelen “:” veya “@” karakterinden oluşur:

:itemName @firstName

Aşağıdaki kod listelemesi, adlandırılmış parametrelerin kullanımını gösterir:

Page 175: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

168ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

var sql:String = "INSERT INTO inventoryItems (name, productCode)" + "VALUES (:name, :productCode)";

var addItemStmt:SQLStatement = new SQLStatement(); addItemStmt.sqlConnection = conn; addItemStmt.text = sql; // set parameter values addItemStmt.parameters[":name"] = "Item name"; addItemStmt.parameters[":productCode"] = "12345"; addItemStmt.execute();

Adlandırılmamış parametreleri kullanma

Adlandırılmış parametre kullanmaya alternatif olarak, adlandırılmamış parametreler de kullanabilirsiniz.

Adlandırılmamış bir parametre kullanmak için, bir SQL ifadesindeki parametreyi “?” kullanarak belirtirsiniz karakter.

İfadedeki parametrelerin sırasına göre, ilk parametrenin dizin 0'la başlayacağı şekilde her parametreye sayısal bir dizin

atanmıştır. Aşağıdaki örnek, önceki örneğin adlandırılmamış parametre kullanılan versiyonunu gösterir:

var sql:String = "INSERT INTO inventoryItems (name, productCode)" + "VALUES (?, ?)";

var addItemStmt:SQLStatement = new SQLStatement(); addItemStmt.sqlConnection = conn; addItemStmt.text = sql; // set parameter values addItemStmt.parameters[0] = "Item name"; addItemStmt.parameters[1] = "12345"; addItemStmt.execute();

Parametre kullanmanın faydaları

Bir SQL ifadesinde parametreler kullanmak, çeşitli faydalar sağlar:

Daha iyi performans Parametreler kullanan bir SQLStatement örneği, her yürütüldüğünde dinamik olarak SQL metni

oluşturan bir örneğe göre daha verimli çalışır. Performans iyileştirmesi, ifadenin tek bir kez hazırlanmış ve SQL

ifadesinin yeniden derlenmesine ihtiyaç duymadan farklı parametre değerleri kullanarak birçok kez yürütülebiliyor

olmasından kaynaklanmaktadır.

Açık veri türleme Parametreler, SQL ifadesi oluşturulduğunda bilinmeyen değerlerin türlenmiş değişikliğine izin

vermek için kullanılır. Parametre kullanımı, veritabanına iletilen bir değer için depo sınıfını garanti etmenin tek

yoludur. Parametreler kullanılmadığında, çalışma zamanı tüm değerleri metin temsillerinden ilişkili sütunun tür

yakınlığına dayanan bir depo sınıfına dönüştürmeye çalışır. Depo sınıfları ve sütun yakınlığı hakkında daha fazla bilgi

için, bkz. “Veri türü desteği“ bölümü, ek: ”Yerel veritabanlarında SQL desteği“, konum: ActionScript 3.0 Dil ve

Bileşenler Başvurusu.

Daha fazla güvenlik Parametrelerin kullanılması, SQL yerleştirme saldırısı olarak bilinen kötü amaçlı bir tekniğin

engellenmesine yardımcı olur. Kullanıcı, SQL yerleştirme saldırısında kullanıcı tarafından erişilebilir bir konuma SQL

kodu girer (örneğin, veri giriş alanı). Uygulama kodu SQL ifadesini doğrudan kullanıcı girdisini SQL metnine

bitiştirerek oluşturuyorsa, kullanıcı taradından girilen SQL kodu veritabanına karşı yürütülür. Aşağıdaki listeleme,

kullanıcı girdisinin SQL metnine bitiştirilmesinin bir örneğini gösterir. Bu tekniği kullanmayın:

Page 176: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

169ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

// assume the variables "username" and "password" // contain user-entered data var sql:String =

"SELECT userId " + "FROM users " + "WHERE username = '" + username + "' " + " AND password = '" + password + "'";

var statement:SQLStatement = new SQLStatement(); statement.text = sql;

Kullanıcı tarafından girilen değerleri ifade metnine bitiştirmek yerine ifade parametrelerinin kullanılması, SQL

yerleştirme saldırısını engeller. Parametre değerleri değişmez ifade metninin bir parçası olmaktansa, açıkça

değiştirilmiş değerler olarak değerlendirildiğinden, SQL yerleştirme gerçekleşemez. Aşağıdaki, bir önceki listelemenin

önerilen bir alternatifidir:

// assume the variables "username" and "password" // contain user-entered data var sql:String =

"SELECT userId " + "FROM users " + "WHERE username = :username " + " AND password = :password";

var statement:SQLStatement = new SQLStatement(); statement.text = sql; // set parameter values statement.parameters[":username"] = username; statement.parameters[":password"] = password;

Bir veritabanından veri alma

Bir veritabanından veri alma, iki adım içerir. Önce veritabanından almak istediğiniz veri kümesini açıklayan bir SQL

SELECT ifadesi yürütürsünüz. Daha sonra, alınan verilere erişerek bunları görüntüler ve uygulamanız için gerektirdiği

biçimde değiştirirsiniz.

Bir SELECT ifadesi yürütme

Var olan verileri veritabanından almak için bir SQLStatement örneği kullanırsınız. Uygun SQL SELECT ifadesini

örneğin text özelliğine atayın, daha sonra execute() yöntemini çağırın.

SELECT ifadesinin sözdizimine ilişkin ayrıntılar için bkz. ActionScript 3.0 Dil ve Bileşenler Başvurusu bölümündeki

”Yerel veritabanlarında SQL desteği“ eki.

Aşağıdaki örnek, senkronize olmayan yürütme modunu kullanan "ürünler" adlı tablodan veri almak için SELECT

ifadesinin yürütülmesini gösterir:

var selectStmt:SQLStatement = new SQLStatement(); // A SQLConnection named "conn" has been created previously selectStmt.sqlConnection = conn; selectStmt.text = "SELECT itemId, itemName, price FROM products"; // The resultHandler and errorHandler are listener methods are // described in a subsequent code listing selectStmt.addEventListener(SQLEvent.RESULT, resultHandler); selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler); selectStmt.execute();

Aşağıdaki örnek, senkronize olmayan yürütme modunu kullanan "ürünler" adlı tablodan veri almak için SELECT

ifadesinin yürütülmesini gösterir:

Page 177: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

170ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

var selectStmt:SQLStatement = new SQLStatement(); // A SQLConnection named "conn" has been created previously selectStmt.sqlConnection = conn; selectStmt.text = "SELECT itemId, itemName, price FROM products"; // This try..catch block is fleshed out in // a subsequent code listing try {

selectStmt.execute(); // accessing the data is shown in a subsequent code listing

} catch (error:SQLError) {

// error handling is shown in a subsequent code listing }

Senkronize olmayan yürütme modunda ifadenin yürütülmesi tamamlandığında, SQLStatement örneği ifadenin başarıyla

çalıştığını gösteren bir result olayı (SQLEvent.RESULT) gönderir. Alternatif olarak, Responder nesnesi bir argüman

olarak execute() çağrısına iletildiyse, Responder nesnesinin sonuç işleyici özelliği çağrılır. Senkronize yürütme

modunda, execute() işlemi tamamlanana kadar yürütme duraklar, daha sonra, sonraki kod satırında devam eder.

SELECT ifadesi sonuç verilerine erişme

SELECT ifadesinin yürütülmesi tamamlandığında, sonraki adım alınan verilere erişmektir. SELECT sonuç kümesindeki

her veri satırı bir Object örneği olur. Bu nesne, adları sonuç kümesindeki sütun adlarıyla eşleşen özellikler içerir.

Özellikler, sonuç kümesinin sütunlarından değerler içerir. Örneğin, bir SELECT ifadesinin “öğeKimliği”, “öğeAdı” ve

“fiyat” adlı üç sütun içeren bir sonuç kümesi belirttiğini düşünün. Sonuç kümesindeki her satır için itemId, itemName,

and price adlı özellikleri içeren bir Object örneği oluşturulur. Bu özellikler, ilgili sütunlarından değerler içerir.

Aşağıdaki kod listelemesi, senkronize olmayan yürütme kipinde veri alma için önceki kod listelemesini devam ettirir.

Sonuç olay dinleyicisi yönteminde alınan verilere nasıl erişileceğini gösterir.

function resultHandler(event:SQLEvent):void {

var result:SQLResult = selectStmt.getResult(); var numResults:int = result.data.length; for (var i:int = 0; i < numResults; i++) {

var row:Object = result.data[i]; var output:String = "itemId: " + row.itemId; output += "; itemName: " + row.itemName; output += "; price: " + row.price; trace(output);

} } function errorHandler(event:SQLErrorEvent):void {

// Information about the error is available in the // event.error property, which is an instance of // the SQLError class.

}

Aşağıdaki kod listelemesi, senkronize yürütme kipinde veri alma için önceki kod listelemesini genişletir. Önceki

senkronize yürütme örneğinde yer alan try..catch blokunu, alınan verilere nasıl erişileceğini göstererek genişletir.

Page 178: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

171ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

try {

selectStmt.execute(); var result:SQLResult = selectStmt.getResult(); var numResults:int = result.data.length; for (var i:int = 0; i < numResults; i++) {

var row:Object = result.data[i]; var output:String = "itemId: " + row.itemId; output += "; itemName: " + row.itemName; output += "; price: " + row.price; trace(output);

} } catch (error:SQLError) {

// Information about the error is available in the // error variable, which is an instance of // the SQLError class.

}

Önceki kod listelemesinin gösterdiği gibi, sonuç nesneleri bir SQLResult örneğinin data örneği olarak kullanılabilen

bir dizide bulunur. Bir olay dinleyicisiyle senkronize olmayan yürütmeyi kullanıyosanız, SQLResult örneğini getirmek

için SQLStatement örneğinin getResult() yöntemini çağırırsınız. execute() çağrısında bir Responder argümanı

belirtirseniz, SQLResult örneği sonuç işleyici işlevine bir argüman olarak gönderilir. Senkronize yürütme modunda

SQLStatement örneğinin getResult() yöntemini execute() yöntem çağrısınndan sonra istediğiniz zaman

çağırabilirsiniz. Her durumda, SQLResult nesnesine sahip olduğunuzda data dizi özelliğini kullanarak sonuç

satırlarına erişebilirsiniz.

Aşağıdaki kod listelemesi, metni bir SELECT ifadesi olan SQLStatement örneğini tanımlar. İfade, çalı�anlar adlı

tablonun tüm satırlarının firstName velastName sütun değerlerini içeren satırlarını getirir. Bu örnek senkronize

olmayan yürütme modunu kullanır. Yürütme tamamlandığında selectResult() yöntemi çağrılır, sonuçlanan veri

satırlarına SQLStatement.getResult() kullanılarak erişilir ve bu satırlar trace() yöntemi kullanılarak

görüntülenir. Bu listelemenin önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir SQLConnection

örneğinin var olduğunu varsaydığını unutmayın. Ayrıca, “çalışanlar” tablosunun önceden oluşturulduğunu ve veriyle

doldurulduğunu varsayar.

Page 179: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

172ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; // ... create and open the SQLConnection instance named conn ... // create the SQL statement var selectStmt:SQLStatement = new SQLStatement(); selectStmt.sqlConnection = conn; // define the SQL text var sql:String =

"SELECT firstName, lastName " + "FROM employees";

selectStmt.text = sql; // register listeners for the result and error events selectStmt.addEventListener(SQLEvent.RESULT, selectResult); selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError); // execute the statement selectStmt.execute(); function selectResult(event:SQLEvent):void {

// access the result data var result:SQLResult = selectStmt.getResult(); var numRows:int = result.data.length; for (var i:int = 0; i < numRows; i++) {

var output:String = ""; for (var columnName:String in result.data[i]) {

output += columnName + ": " + result.data[i][columnName] + "; "; } trace("row[" + i.toString() + "]\t", output);

} } function selectError(event:SQLErrorEvent):void {

trace("Error message:", event.error.message); trace("Details:", event.error.details);

}

Aşağıdaki kod listelemesi, önceki örnekteki tekniklerin aynısını senkronize yürütme modunda gösterir. Örnek, metni

bir SELECT ifadesi olan SQLStatement örneğini tanımlar. İfade, çalı�anlar adlı tablonun tüm satırlarının firstName

velastName sütun değerlerini içeren satırlarını getirir. Sonuçlanan veri satırlarına SQLStatement.getResult()

kullanılarak erişilir ve bu satırlar trace() yöntemi kullanılarak görüntülenir. Bu listelemenin önceden başlatılmış ve

bir veritabanına bağlanmış conn adlı bir SQLConnection örneğinin var olduğunu varsaydığını unutmayın. Ayrıca,

“çalışanlar” tablosunun önceden oluşturulduğunu ve veriyle doldurulduğunu varsayar.

Page 180: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

173ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; // ... create and open the SQLConnection instance named conn ... // create the SQL statement var selectStmt:SQLStatement = new SQLStatement(); selectStmt.sqlConnection = conn; // define the SQL text var sql:String =

"SELECT firstName, lastName " + "FROM employees";

selectStmt.text = sql; try {

// execute the statement selectStmt.execute(); // access the result data var result:SQLResult = selectStmt.getResult(); var numRows:int = result.data.length; for (var i:int = 0; i < numRows; i++) {

var output:String = ""; for (var columnName:String in result.data[i]) {

output += columnName + ": " + result.data[i][columnName] + "; "; } trace("row[" + i.toString() + "]\t", output);

} } catch (error:SQLError) {

trace("Error message:", error.message); trace("Details:", error.details);

}

SELECT sonuç verilerinin veri türünü tanımlama

Varsayılan olarak, SELECT ifadesinin döndürdüğü her satır, sonuç kümesinin sütun adlarıyla adlandırılan özellikler ve

her biri ilgili özelliğinin değerine sahip sütun değerini içeren bir Object örneği olarak oluşturulur. Ancal, bir SQL

SELECT ifadesini yürütmeden önce SQLStatement örneğinin itemClass özelliğini bir sınıfa ayarlayabilirsiniz.

itemClass özelliğinin ayarlanmasıyla, SELECT ifadesinin döndürdüğü her satır, belirlenen sınıfın bir örneği olarak

oluşturulur. Çalışma zamanı, SELECT sonuç kümesindeki sütun adlarını itemClass sınıfındaki özellik adlarına

eşleyerek özellik değerlerine sonuç sütunu değerleri atar.

itemClass özellik değeri olarak atanan her sınıf, herhangi bir parametre gerektirmeyen bir yapıcı içermelidir. Sınıf

ayrıca, SELECT ifadesinin döndürdüğü her sütun için tek bir özellik içermelidir. SELECT listesindeki bir sütun

itemClass sınıfında kendisiyle eşleşen bir özellik adına sahip değilse, bu bir hata olarak değerlendirilir.

SELECT sonuçlarını bölümler halinde alma

Varsayılan olarak, bir SELECT ifade yürütmesi sonuç kümesinin tüm satırlarını bir seferde alır. İfade tamamlandığında,

alınan verileri genellikle nesneler oluşturma veya verileri ekranda görüntüleme gibi bir yolla işlersiniz. İfade çok sayıda

satır döndürürse, tüm verilerin bir defada işlenmesi, kullanıcı arabiriminin kendisini yeniden düzenlememesine

neden olacak biçimde bilgisayar için zorlayıcı olabilir.

Page 181: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

174ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Çalışma zamanına bir defada belirli sayıda sonuç satırı döndürmesini söyleyerek uygulamanızın algılanan

performansını iyileştirebilirsiniz. Bu, ilk sonuç verilerinin daha çabuk dönmesini sağlar. Ayrıca sonuç satırlarını

kümeler halinde bölümlemenizi ve böylece kullanıcı arabiriminin işlenen her satır kümesinden sonra güncellenmesini

sağlar. Bu tekniği kullanmanın yalnızca senkronize olmayan modda kullanışlı olduğunu unutmayın.

SELECT sonuçlarını bölümler halinde almak için SQLStatement.execute() yönteminin ilk parametresi için bir değer

belirleyin (prefetch parametresi). prefetch parametresi, ifade ilk yürütüldüğünde getirilecek satır sayısını gösterir.

SQLStatement örneğinin execute() yöntemini çağırdığınızda, bir prefetch parametre değeri belirtin. Yalnızca bu

sayıda satır getirilecektir:

var stmt:SQLStatement = new SQLStatement(); stmt.sqlConnection = conn; stmt.text = "SELECT ..."; stmt.addEventListener(SQLEvent.RESULT, selectResult); stmt.execute(20); // only the first 20 rows (or fewer) are returned

İfade, ilk sonuç satırı kümesinin kullanılabilir olduğunu gösteren result olayını gönderir. Sonuçlanan SQLResult

örneğinin data özelliği, veri satırlarını ve getirilecek ek sonuç satırları olup olmadığını gösteren complete özelliğini

içerir. Ek sonuç satırlarını almak için SQLStatement örneğinin next() yöntemini çağırın. execute() yöntemi gibi,

next() yönteminin ilk parametresi, sonuç olayının sonraki gönderilişinde kaç satır alınacağını göstermek için

kullanılır.

function selectResult(event:SQLEvent):void {

var result:SQLResult = stmt.getResult(); if (result.data != null) {

// ... loop through the rows or perform other processing ... if (!result.complete) {

stmt.next(20); // retrieve the next 20 rows } else {

stmt.removeEventListener(SQLEvent.RESULT, selectResult); }

} }

next() yöntemi sonraki sonuç satırlarını her döndürdüğünde, SQLStatement bir result olayı gönderir. Sonuç

olarak, tüm satırlar alınana kadar sonuçları (next() çağrılarından) işlemeye devam etmek için aynı dinleyici işlevi

kullanılabilir.

Daha fazla bilgi için SQLStatement.execute() yöntemi (prefetch parametre açıklaması) ve

SQLStatement.next() yöntemi için dil başvurusu açıklamalarına bakın.

Veri ekleme

Bir veritabanından veri alma, SQL INSERT ifadesinin yürütülmesini içerir. İfadenin yürütülmesi tamamlandığında,

veritabanı tarafından oluşturulduysa, yeni eklenen satıra ilişkin ana anahtara erişebilirsiniz.

Bir INSERT ifadesini yürütme

Veritabanındaki bir tabloya veri eklemek için, metni SQL INSERT ifadesi olan bir SQLStatement örneği oluşturur ve

bu örneği yürütürsünüz.

Page 182: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

175ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Aşağıdaki örnek, önceden var olan çalışanlar tablosuna bir veri satırı eklemek için SQLStatement örneğini kullanır. Bu

örnek, senkronize olmayan yürütme modunu kullanarak veri eklemeyi gösterir. Bu listelemenin önceden başlatılmış

ve bir veritabanına bağlanmış conn adlı bir SQLConnection örneğinin var olduğunu varsaydığını unutmayın. Ayrıca

“çalışanlar” tablosunun önceden oluşturulduğunu varsayar.

import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; // ... create and open the SQLConnection instance named conn ... // create the SQL statement var insertStmt:SQLStatement = new SQLStatement(); insertStmt.sqlConnection = conn; // define the SQL text var sql:String =

"INSERT INTO employees (firstName, lastName, salary) " + "VALUES ('Bob', 'Smith', 8000)";

insertStmt.text = sql; // register listeners for the result and failure (status) events insertStmt.addEventListener(SQLEvent.RESULT, insertResult); insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError); // execute the statement insertStmt.execute(); function insertResult(event:SQLEvent):void {

trace("INSERT statement succeeded"); } function insertError(event:SQLErrorEvent):void {

trace("Error message:", event.error.message); trace("Details:", event.error.details);

}

Aşağıdaki örnek, senkronize yürütme modunu kullanarak önceden var olan çalışanlar tablosuna bir veri satırı ekler.

Bu listelemenin önceden başlatılmış ve bir veritabanına bağlanmış conn adlı bir SQLConnection örneğinin var

olduğunu varsaydığını unutmayın. Ayrıca “çalışanlar” tablosunun önceden oluşturulduğunu varsayar.

Page 183: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

176ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; // ... create and open the SQLConnection instance named conn ... // create the SQL statement var insertStmt:SQLStatement = new SQLStatement(); insertStmt.sqlConnection = conn; // define the SQL text var sql:String =

"INSERT INTO employees (firstName, lastName, salary) " + "VALUES ('Bob', 'Smith', 8000)";

insertStmt.text = sql; try {

// execute the statement insertStmt.execute(); trace("INSERT statement succeeded");

} catch (error:SQLError) {

trace("Error message:", error.message); trace("Details:", error.details);

}

Eklenen bir satırın veritabanı tarafından oluşturulan ana anahtarını alma

Bir tabloya veri satırı eklendikten sonra kodunuz genellikle yeni eklenen satıra ilişkin veritabanı tarafından oluşturulan

ana anahtarı veya satır kimlik değerini bilmek ister. Örneğin, bir tabloya satır eklediğinizde, ilgili bir tabloya satır

eklemek isteyebilirsiniz. Bu durumda, ana anahtar değerini ilişkili tabloya yabancı anahtar olarak girmek istersiniz.

Yeni eklenen satırın ana anahtarı, ifade yürütme tarafından oluşturulan SQLResult nesnesi kullanılarak alınabilir. Bu,

SELECT ifadesinin yürütülmesinden sonra sonuç verilerine erişmek için kullanılan nesnenin aynısıdır. Tüm SQL

ifadelerinde olduğu gibi, INSERT ifadesinin yürütülmesi tamamlandığında, çalışma zamanı bir SQLResult örneği

oluşturur. Bir olay dinleyicisi veya senkronize yürütme modunu kullanıyorsanız SQLStatement nesnesinin

getResult() yöntemini çağırarak SQLResult örneğine erişebilirsiniz. Alternatif olarak, senkronize olmayan yürütme

modunu kullanıyorsanız ve execute() çağrısına bir Responder örneği iletirseniz, SQLResult örneği bir argüman olarak

sonuç işleyici işlevine iletilir. Her durumda, yürütülen SQL ifadesi bir INSERT ifadesiyse, SQLResult örneği, en son

eklenen satırın satır kimliğini içeren bir lastInsertRowID özelliğine sahiptir.

Aşağıdaki örnek, senkronize olmayan yürütme modunda eklenen bir satırın ana anahtarına erişmeyi gösterir:

insertStmt.text = "INSERT INTO ..."; insertStmt.addEventListener(SQLEvent.RESULT, resultHandler); insertStmt.execute(); private function resultHandler(event:SQLEvent):void {

// get the primary key var result:SQLResult = insertStmt.getResult(); var primaryKey:Number = result.lastInsertRowID; // do something with the primary key

}

Aşağıdaki örnek, senkronize yürütme modunda eklenen bir satırın ana anahtarına erişmeyi gösterir:

Page 184: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

177ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

insertStmt.text = "INSERT INTO ..."; insertStmt.addEventListener(SQLEvent.RESULT, resultHandler); try {

insertStmt.execute(); // get the primary key var result:SQLResult = insertStmt.getResult(); var primaryKey:Number = result.lastInsertRowID; // do something with the primary key

} catch (error:SQLError) {

// respond to the error }

Aşağıdaki kurala göre, satır kimliğinin tablo tanımında ana anahtar sütunu olarak belirlenen sütunun değeri

olabileceğini veya olmayabileceğini unutmayın:

• Tablo, yakınlığı (sütun veri türü) INTEGER olan bir ana anahtar sütunuyla tanımlandıysa, lastInsertRowID

özelliği, bu satıra eklenen değeri (veya AUTOINCREMENT sütunuysa, çalışma zamanı tarafından oluşturulan değeri)

içerir.

• Tablo birden çok ana anahtar sütunuyla (bileşik anahtar) veya yakınlığı INTEGER olan tek bir ana anahtar sütunuyla

tanımlandıysa, veritabanı perde arkasında satıra ilişkin bir satır kimlik değeri oluşturur. Oluşturulan bu değer,

lastInsertRowID özelliğinin değeridir.

• Değer, her zaman en son eklenen satırın satır kimliğidir. Bir INSERT ifadesi satır ekleyen bir tetikleyicinin

çalışmasına neden olursa, lastInsertRowID özelliği, INSERT ifadesinin oluşturduğu satırın değil, tetikleyicinin

eklediği son satırın satır kimliğini içerir. Sonuç olarak, değeri INSERT komutundan sonra

SQLResult.lastInsertRowID özelliği aracılığıyla kullanılabilen, açıkça tanımlanmış bir ana anahtar sütununa

sahip olmak istiyorsanır, sütun bir INTEGER PRIMARY KEY sütunu olarak tanımlanmalıdır. Ancak, tablonuz bir

INTEGER PRIMARY KEY sütunu içermese bile, ilgili tablolarla ilişkilerin tanımlanması bakımından, tablonuz için

ana anahtar olarak veritabanı tarafından oluşturulmuş bir satır kimliği kullanmanın eşit derecede kabul edilebilir

olduğunu unutmayın. Satır kimliği sütun değeri tüm SQL ifadelerinde ROWID, _ROWID_ veya OID adındaki özel

sütun adlarından biri aracılığıyla kullanılabilir. İlgili bir tabloda yabancı bir anahtar oluşturabilir ve satır kimlik

değerini, açıkça bildirilen INTEGER PRIMARY KEY sütunu için yapacağınız gibi yabancı anahtar sütun değeri olarak

kullanabilirsiniz. Bu anlamda, doğan anahtar yerine rasgele bir ana anahtar kullanıyorsanız, çalışma zamanının

sizin için ana anahtar değeri oluşturmasını önemsemediğiniz sürece, iki tablo arasındaki yabancı anahtar ilişkisini

tanımlamak için tablonun ana anahtarı olarak INTEGER PRIMARY KEY sütunu veya sistem tarafından oluşturulmuş

bir satır kimliği kullanmanız arasında çok az fark vardır.

Ana anahtarlar be oluşturulan satır kimlikleri hakkında daha fazla bilgi için ActionScript 3.0 Dil ve Bileşenler

Başvurusu adresinde yer alan “Yerel veritabanlarında SQL desteği” ekindeki “TABLO OLUŞTURMA” ve “İfadeler”

bölümlerine bakın.

Verileri değiştirme veya silme

Diğer veri değiştirme işlemlerinin yürütülmesi işlemi, SQL SELECT veya INSERT ifadelerinin yürütülmesi işlemiyle

aynıdır. Yalnızca SQLStatement örneğinin text özelliğini farklı bir SQL ifadesiyle değiştirin:

• Bir tabloda var olan verileri değiştirmek için UPDATE ifadesini kullanın.

• Tablodan bir veya daha çok satırı silmek için DELETE ifadesini kullanın.

Bu ifadelerin açıklamaları için ActionScript 3.0 Dil ve Bileşenler Başvurusu adresindeki “Yerel veritabanlarında SQL

desteği” ekine bakın.

Page 185: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

178ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Birden çok veritabanıyla çalışma

Önceden açık bir veritabanı içeren SQLConnection örneğinde ek bir veritabanı bağlantısı açmak için

SQLConnection.attach() yöntemini kullanın. Attach() yöntem çağrısındaki ad parametresini kullanarak, eklenen

veritabanına bir ad verirsiniz. Bu veritabanını değiştirmek için ifadeler yazarken, SQL ifadenizde tablonun

adlandırılmış veritabanında bulunabileceği çalışma zamanını gösteren tablo adlarını nitelemek için önekte bulunan bu

adı (veritabanı-ad.tablo-ad biçimini kullanan) kullanabilirsiniz.

Aynı SQLConnection örneğine bağlı olan birden çok veritabanından tablolar içeren tek bir SQL ifadesi yürütebilirsiniz.

Bir işlem SQLConnection örneğinde oluşturulduysa, bu işlem SQLConnection örneği kullanılarak yürütülen tüm SQL

ifadelerine uygulanır. Bu, ifadenin hangi eklenmiş veritabanında çalıştığına bakılmaksızın geçerli olur.

Alternatif olarak, bir uygulamada her biri bir veya daha çok veritabanına bağlı olan birden çok SQLConnection örneği

oluşturabilirsiniz. Ancak, aynı veritabanı için birden çok bağlantı kullanırsanız, veritabanı işlemlerinin

SQLConnection örnekleri tarafından paylaşılmadığını aklınızda bulundurmanız gerekir. Sonuç olarak, birden çok

SQLConnection örneği kullanarak aynı veritabanı dosyasına bağlanırsanız, tüm bağlantılardaki veri değişikliklerinin

beklenen biçimde uygulanacağından emin olamazsınız. Örneğin, iki UPDATE veya DELETE farklı SQLConnection

örnekleri aracılığıyla aynı veritabanına karşı çalışır ve işlem gerçekleştikten sonra uygulama hatası oluşursa, veritabanı

verileri geri alınamayacak bir biçimde ara durumda bırakılabilir ve bu durum veritabanının bütünlüğünü (ve sonuç

olarak uygulamayı) etkileyebilir.

Veritabanı hatalarını işleme

Veritabanı hatalarının işlenmesi genellikle diğer çalışma zamanı hatalarının işlenmesine benzer. Oluşabilecek hatalar

için hazırlanmış bir kod yazmalı ve bunu yapmayı çalışma zamanına bırakmak yerine hatalara yanıt vermelisiniz. Olası

veritabanı hataları genel anlamda üç kategoriye ayrılabilir: bağlantı hataları, SQL sözdizim hataları ve sınırlama

hataları.

Bağlantı hataları

Veritabanı hatalarının çoğu bağlantı hatalarıdır ve bunlar herhangi bir işlem sırasında oluşabilir. Bunlar bağlantı

hatalarını engellemeye yönelik stratejiler olsa da, veritabanı uygulamanızın çok önemli bir parçasıysa, bazen bir

bağlantı hatasını düzgün biçimde gidemenin kolay bir yolu vardır.

Çoğu bağlantı hatası, çalışma zamanının işletim sistemiyle, dosya sistemiyle ve veritabanı dosyasıyla iletişim kurma

biçimiyle ilgilidir. Örneğin, kullanıcının dosya sistemindeki belirli bir konumda veritabanı dosyası oluşturmak için

izni yoksa, bir bağlantı hatası oluşur. Aşağıdaki stratejiler, bağlantı hatalarını engellemeye yardımcı olur:

Kullanıcıya özgü veritabanı dosyaları kullanın Tek bir bilgisayardaki uygulamayı kullanan tüm kullanıcılar için tek bir

veritabanı dosyası kullanmak yerine, her kullanıcıya kendi veritabanı dosyasını verin. Dosya, kullanıcının hesabıyla

ilişkilendirilmiş bir dizinde konumlandırılmalıdır. Bu örneğin, uygulama depo dizini, kullanıcının belgeler klasörü,

kullanıcının masaüstü, vb. olabilir.

Farklı kullanıcı türlerini dikkate alın Uyulamanızı farklı işletim sistemlerinde farklı kullanıcı hesabı türleriyle test edin.

Kullanıcının bilgisayarda yönetici iznine sahip olduğunu varsaymayın. Ayrıca, uygulamayı yükleyen kişinin,

uygulamayı çalıştıran kullanıcı olduğunu varsaymayın.

Farklı dosya konumlarını dikkate alın Kullanıcının bir veritabanı dosyasını nereye kaydedeceğini veya açacağı

dosyanın yerini belirlemesine izin verirseniz, kullanıcının kullanabileceği olası farklı dosya konumlarını dikkate alın.

Ayrıca, kullanıcının veritabanı dosyalarını saklayacağı (veya açacağı) konumlara ilişkin sınırlar tanımlamayı düşünün.

Örneğin, kullanıcıların yalnızca kullanıcı hesabının depo konumunda yer alan dosyaları açmasına izin verebilirsiniz.

Bağlantı hatası oluşursa, büyük olasılıkla ilk veritabanı oluşturma veya açma girişimi sırasında gerçekleşir. Bu,

kullanıcının uygulamadaki herhangi bir veritabanı ilişkili işlemi yapamadığı anlamına gelir. Salt okunur veya izin

hataları gibi belirli hata türleri için, olası kurtarma tekniklerinden biri veritabanı dosyasını farklı bir konuma

Page 186: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

179ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

kopyalamaktır. Uygulama veritabanı dosyasını kullanıcının dosya oluşturma ve yazma izninin olmadığı farklı bir

konuma kopyalayabilir ve bu konumu kullanabilir.

Sözdizim hataları

Bir SQL ifadesi yanlış biçimde oluşturulduğunda ve uygulama ifadeyi yürütmeye çalıştığında bir sözdizim hatası

oluşur. Yerel veritabanı SQL ifadeleri dizeler halinde oluşturulduğundan, derleme zamanı SQL sözdiziminin kontrol

edilmesi mümkün değildir. Sözdizimlerini kontrol etmek için, tüm SQL ifadeleri yürütülmelidir. SQL sözdizim

hatalarını önlemek için aşağıdaki stratejileri kullanın:

Tüm SQL ifadelerini test edin Uygulamanızı geliştirirken mümkünse SQL ifadelerinizi uygulama kodunda ifade metni

olarak kodlamadan önce ayrıca test edin. Ayrıca, tüm olası seçenekleri ve koddaki değişimi deneyen bir dizi test

oluşturmak için birim testi gibi bir kod testi yaklaşımını kullanın.

İfade parametrelerini kullanın ve SQL'i bitiştirmekten (dinamik olarak oluşturmaktan) kaçının Parametre kullanmak

ve dinamik olarak oluşturulan SQL ifadelerinden kaçınmak, bir ifade her yürütüldüğünde aynı SQL ifade metninin

kullanılması anlamına gelir. Sonuç olarak, ifadelerinizi test etmeniz ve olası değişimleri sınırlamanız çok daha

kolaydır. Bir SQL ifadesini dinamik olarak oluşturmanız gerekiyorsa, ifadenin dinamik bölümlerini minimum

düzeyde tutun. Ayrıca, sözdizim hatalarına neden olmayacağından emin olmak için, her kullanıcı girdisini dikkatlice

doğrulayın.

Uygulamanın, bir sözdizim hatasını kurtarmak için bir SQL ifadesini incelemek ve sözdizimini düzeltmek üzere

karmaşık mantığa ihtiyacı olacaktır. Kodunuz, sözdizim hatalarını önlemek için yukarıda belirtilen yönergeleri takip

ederek herhangi bir olası SQL sözdizim hatası çalışma zamanı kaynağını tanımlayabilir (bir ifadede kullanılan

kullanıcı girişi gibi). Sözdizim hatalarının kurtarılması için kullanıcıya yol gösterin. İfadenin düzgün biçimde

yürütülmesi için neyin düzeltilmesi gerektiğini gösterin

Sınırlama hataları

Bir INSERT veya UPDATE ifadesi bir sütuna veri eklemeye çalıştığında sınırlama hataları oluşur. Yeni veriler tablo veya

sütun için tanımlanan sınırlamalardan birini ihlal ediyorsa hata oluşur. Olası sınırlamalar kümesi şunları içerir:

Benzersiz sınırlama Bir tablodaki satırlar arasında, bir sütunda çift değer olamayacağını gösterir. Alternatif olarak,

birden çok sütun benzersiz bir sınırlamada birleştirildiğinde, bu sütunlardaki değerlerin bileşimi çift olamaz. Diğer bir

deyişle, belirtilen benzersiz sütun veya sütunlar bakımından, her satır farklı olmalıdır.

Ana anahtar sınırlaması Bir sınırlamanın izin verdiği ve vermediği veriler bakımından, ana anahtar sınırlaması

benzersiz sınırlamayla aynıdır.

Null sınırlaması Tek bir sütunun NULL değerini saklayamayacağını ve sonuç olarak her satırda bu sütunun bir değere

sahip olması gerektiğini belirtir.

Denetim sınırlaması Bir veya birden çok tablo için rasgele bir sınırlama belirtmenize olanak verir. Yaygın bir denetim

sınırlaması, bir sütunun değerinin belirli sınırlar içinde olması gerektiğini tanımlayan bir kuraldır (örneğin, sayısal bir

sütunun değeri 0'dan büyük olmalıdır). Diğer bir yaygın denetim sınırlaması türü, sütun değerleri arasındaki ilişkileri

belirtir (örneğin, bir sütunun değeri aynı satırdaki diğer sütunların değerinden farklı olmalıdır).

Veri türü (sütun yakınlığı) sınırlaması Çalışma zamanı, sütun değerleri için bir veri türü belirler ve bir sütunda yanlış

türde bir değeri saklama girişiminde bulunulduğunda hata oluşur. Ancak, çoğu durumda değerler sütunun belirtilen

veri türüyle eşleşecek biçimde dönüştürülür. Daha fazla bilgi için bkz. “Veritabanı veri türleriyle çalışma” sayfa 181

Çalışma zamanı, yabancı anahtar değerleri üzerinde sınırlama uygulamaz. Başka bir deyişle, yabancı anahtar

değerlerinin var olan bir ana anahtar değeriyle eşleşmesi gerekmez.

Önceden tanımlı sınırlama türlerinin yanı sıra, çalışma zamanı SQL motoru, tetikleyicilerin kullanımını destekler. Bir

tetikleyici, bir olay işleyiciye benzer. Belirli bir eylem gerçekleştiğinde yürütülen, önceden tanımlı bir talimatlar

kümesidir. Örneğin, bir tetikleyici belirli bir tabloya veri eklendiğinde veya bu tablodan veri silindiğinde çalışacak

Page 187: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

180ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

biçimde tanımlanabilir. Olası bir tetikleyici kullanımı, tetikleyicinin veri değişikliklerini incelemesi ve belirlenen

koşullar karşılanmıyorsa bir hataya neden olmasıdır. Sonuç olarak tetikleyici, sınırlamayla aynı amaca hizmet edebilir

ve sınırlama hatalarının önlenmesi ve kurtarılmasına ilişkin stratejiler tetikletici tarafından oluşturulan hatalar için de

geçerlidir. Ancak, tetikleyici tarafından oluşturulan hatalara ilişkin hata kimliği, sınırlama hatalarına ilişkin hata

kimliğinden farklıdır.

Belirli bir tabloya uygulanan sınırlama kimesi, uygulamanızı tasarladığınız sırada belirlenir. Sınırlamaların bilinçli

şekilde tasarlanması, uygulamanızı sınırlama hatalarının önlenmesi ve kurtarılmasına yönelik tasarlamanızı

kolaylaştırır. Ancak, sınırlama hatalarının sistematik olarak tahmin edilmesi ve önlenmesi zordur. Sınırlama hataları

uygulama verileri eklenene kadar görünmediğinden, tahmin etmek zordur. Sınırlama hataları, oluşturulduktan sonra

veritabanına eklenen verilerle oluşur. Bu hatalar genellikle yeni veriler ve veritabanında önceden bulunan veriler

arasındaki ilişkinin bir sonucudur. Aşağıdaki stratejiler, birçok sınırlama hatasının önlenmesine yardımcı olur:

Veritabanı yapısını ve sınırlamaları dikkatlice planlayın Sınırlamaların amacı uygulama kuralları koymak ve

veritabanı verilerinin bütünlüğünü korumaya yardımcı olmaktır. Uygulamanızı planlarken, veritabanınızı

uygulamanızı desteklemesi açısından nasıl yapılandırmanız gerektiğini düşünün. Bu işlemin bir parçası olarak,

verilerinize ilişkin belirli değerlerin gerekli olup olmadığı, bir değerin varsayılanı olup olmadığı, çift değerlerin izinli

olup olmadığı, vb. kuralları tanımlayın. Bu kurallar, veritabanı sınırlamalarını tanımlamanızda size rehberlik eder.

Sütun adlarını açıkça belirtin INSERT ifadesi, değerlerin ekleneceği sütunları açık biçimde belirtmeden yazılabilir,

ancak böyle yapmak, gerekli olmayan bir risktir. Değerlerin ekleneceği sütunları açık biçimde adlandırarak otomatik

olarak oluşturulan değerlere, varsayılan değerler içeren sütunlara ve NULL değerlerine izin veren sütunlara olanak

tanıyabilirsiniz. Ayrıca, bunu yaparak tüm NOT NULL sütunlarına açık biçimde bir değerin eklenmesini garanti

edebilirsiniz.

Varsayılan değerler kullanın Bir sütun için NOT NULL sınırlamasını belirlediğinizde, mümkünse sütun tanımında

varsayılan bir değer belirleyin. Uygulama kodu da varsayılan değerler sağlayabilir. Örneğin, kodunuz bir String

değişkeninin null olup olmadığını kontrol edebilir ve bir ifade parametre değeri ayarlamak için kullanmadan önce bu

değişkene bir değer atayabilir.

Kullanıcı tarafından girilen verileri doğrulayın Özellikle NOT NULL ve CHECK sınırlamalarının olduğu durumlarda

kullanıcı tarafından girilen verilerin sınırlamalar tarafından belirtilen sınırlara uyduğundan emin olmak için bu

verileri önceden kontrol edin. Doğal olarak, bir UNIQUE sabitinin kontrol edilmesi daha zordur, çünkü bu kontrol

verilerin benzersiz olup olmadığını belirlemek için bir SELECT sorgusunun yürütülmesini gerektirir.

Tetikleyiciler kullanın Eklenen verileri doğrulayan (ve değiştirebilen) veya geçersiz verileri düzeltmek için diğer

eylemleri gerçekleştiren bir tetikleyici yazabilirsiniz. Bu doğrulama ve düzeltme, bir sınırlama hatasının oluşmasını

önleyebilir.

Sınırlama hatalarının engellenmesi, birçok bakımdan diğer türdeki hataların engellenmesinden daha zordur. Yine de,

uygulamayı istikrarsız ve kullanılamaz bir duruma getirmeden bu hataları kurtarmaya yönelik birkaç strateji vardır:

Çakışma algoritmaları kullanın Bir sütunda sınırlama tanımladığınızda ve bir INSERT veya UPDATE ifadesi

oluşturduğunuzda, bir çakışma algoritması belirleme seçeneğine sahip olursunuz. Çakışma algoritması, bir sınırlama

ihlali gerçekleştiğinde veritabanının yapacağı eylemi tanımlar. Veritabanı motorunun gerçekleştirebileceği birkaç olası

eylem vardır. Veritabanı motoru tek bir ifadeyi veya tüm işlemi sonlandırabilir. Hatayı yoksayabilir. Eski verileri

kaldırıp bunları kodun saklamaya çalıştığı verilerle değiştirebilir.

Daha fazla bilgi için ActionScript 3.0 Dil ve Bileşenler Başvurusu adresinde yer alan “Yerel veritabanlarında SQL

desteği” ekindeki “ON CONFLICT (çakışma algoritmaları)” bölümüne bakın.

Düzeltici geribildirim sağlayın Belirli bir SQL komutunu etkileyebilecek sınırlamalar kümesi önceden tanımlanabilir.

Sonuç olarak, bir ifadenin neden olabileceği sınırlama hatalarını tahmin edebilirsiniz. Bu bilgiyle, bir sınırlama

hatasına yanıt vermek için uygulama mantığı oluşturabilirsiniz. Örneğin, bir uygulamanın yeni ürünlerin girişi için bir

veri giriş formu içerdiğini varsayın. Veritabanındaki ürün adı sütunu UNIQUE sınırlamasıyla tanımlanıyorsa,

Page 188: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

181ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

veritabanına yeni bir ürün satırı ekleme eylemi bir sınırlama hatasına neden olabilir. Sonuç olarak, uygulama bir

sınırlama hatasını tahmin edecek biçimde tasarlanmıştır. Hata gerçekleştiğinde, uygulama kullanıcıyı belirtilen ürün

adının zaten kullanılmakta olduğunu göstererek ve farklı bir ürün adı seçmesini isteyerek kullanıcıyı uyarır. Olası

başka bir yanıt, kullanıcının aynı ada sahip diğer ürün hakkındaki bilgileri görüntülemesine izin vermektir.

Veritabanı veri türleriyle çalışma

Bir veritabanında tablo oluşturulduğunda, tablo oluşturmaya ilişkin SQL ifadesi tablodaki her sütun için yakınlığı veya

veri türünü tanımlar. Yakınlık bildirimleri göz ardı edilebilse de, sütun yakınlığını CREATE TABLE SQL ifadenizde açık

biçimde belirtmek iyi bir fikirdir.

Genel bir kural olarak, INSERT ifadesini kullanarak veritabanında sakladığınız her nesne, SELECT ifadesini

yürüttüğünüzde aynı veri türünün bir örneği olarak döndürülür. Ancak, alınan değerin veri türü, verinin saklandığı

veritabanı sütununun yakınlığına bağlı olarak değişik olabilir. Değer bir sütunda saklandığında, veri türü sütunun

yakınlığıyla eşleşmiyorsa, veritabanı değeri sütunun yakınlığıyla eşleşecek biçimde dönüştürmeye çalışır. Örneğin, bir

veritabanı sütunu için NUMERIC yakınlığı bildirildiyse, veritabanı verileri saklamadan önce girilen veriyi sayısal

saklama sınıfına (INTEGER veya REAL) dönüştürmeye çalışır. Veri dönüştürülemezse, veritabanı bir hata verir. Bu

kurala göre, “12345” Dizesi bir NUMERIC sütununa eklendiğinde, veritabanı bu dizeyi saklamadan önce otomatik

olarak 12345 tam sayı değerine dönüştürür. Veri bir SELECT ifadesi kullanılarak alındığında, değer bir Dize örneği

olarak değil, bir sayısal veri türü (örneğin Numara) örneği olarak döndürülür.

İstenmeyen veri türü dönüştürmesini önlemenin en iyi yolu iki kuralı takip etmektir. Öncelikle, her sütunu saklanması

hedeflenen veri türüyle eşleşecek yakınlıkla tanımlayın. Daha sonra, yalnızca veri türü tanımlanan yakınlıkla eşleşen

değerleri ekleyin. Bu kuralların takip edilmesi, iki fayda sağlar. Veri eklediğinizde, veriler beklenmedik şekilde (büyük

olasılıkla sonuç olarak hedeflenen anlamını kaybedecek biçimde) dönüştürülmez. Ayrıca, verileri almak istediğinizde,

veriler orijinal veri türünde döndürülür.

Kullanılabilir sütun yakınlığı türleri ve SQL ifadelerinde veri türlerini kullanma hakkında daha fazla bilgi için

ActionScript 3.0 Dil ve Bileşenler Başvurusu adresindeki “Yerel veritabanlarında SQL desteği” ekinde yer alan “Veri

türü desteği” bölümüne bakın.

Senkronize ve senkronize olmayan veritabanı işlemlerini kullanma

Önceki bölümler verilerin alınması, eklenmesi, güncellenmesi ve silinmesi gibi yaygın veritabanı işlemlerinin yanı sıra,

bir veritabanı içinde veritabanı dosyası, tablolar ve diğer nesnelerin oluşturulmasını açıkladı. Örnekler bu işlemlerin

senkronize olmayan ve senkronize biçimlerde nasıl gerçekleştirileceğini gösterdi.

Anımsatıcı olarak, senkronize olmayan yürütme modunda veritabanı motoruna bir işlem gerçekleştirmesini

bildirirsiniz. Daha sonra, uygulama çalışmaya devam ederken veritabanı motoru arka planda çalışır. İşlem

tamamlandığında, veritabanı motoru sizi bu konuda uyarmak için bir olay gönderir. Senkronize olmayan yürütmenin

temel faydası, ana uygulama kodu yürütülmeye devam ederken çalışma zamanının veritabanı işlemlerini arka planda

gerçekleştirmesidir. Bu özellikle, bir işlem önemli ölçüde zaman alıyorsa değerli bir faydadır.

Diğer taraftan, senkronize yürütme modu işlemleri arka planda çalışmaz. Veritabanı motoruna bir işlem

gerçekleştirmesini söylersiniz. Veritabanı motoru işini yaparken, kod bu noktada duraklar. İşlem tamamlandığında,

yürütme sonraki kod satırıyla devam eder.

Page 189: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

182ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Tek bir veritabanı bağlantısı, bazı işlemler ve ifadeleri senkronize, diğerlerini senkronize olmayan biçimde yürütemez.

Veritabanı bağlantısını açtığınızda, bir SQLConnection bağlantısının senkronize veya senkronize olmayan modda

çalıştığını belirtmelisiniz SQLConnection.open() yöntemini çağırırsanız, bağlantı senkronize yürütme modunda,

SQLConnection.openAsync() yöntemini çağırırsanız senkronize olmayan yürütme modunda çalışır.

SQLConnection örneği open() veya openAsync() kullanarak bir veritabanına bağlandığında, senkronize veya

senkronize olmayan yürütmeye sabitlenir.

Senkronize veritabanı işlemlerini kullanma

Senkronize yürütmeyi kullanırken işlemleri yürütmek ve yanıtlamak için kullandığınız geçerli kodla, senkronize

olmayan yürütme modunda kullandığınız kod arasında çok az fark vardır. İki yaklaşım arasındaki temel farklar iki

alanda incelenebilir. Birincisi, başka bir işleme bağlı olan bir işlem yürütmektir (SELECT sonuç satırları veya bir

INSERT ifadesi tarafından eklenen satırın ana anahtarı gibi). İkinci fark alanı, hataların işlenmesidir.

Senkronize işlemler için kod yazma

Senkronize ve senkronize olmayan işlemler arasındaki temel fark, senkronize modda kodun tek bir adım serisi olarak

yazılmasıdır. Senkronize olmayan kodda ise, olay dinleyicileri kaydeder ve işlemleri genellikle dinleyici yöntemleri

arasında bölümlersiniz. Senkronize yürütme modunda bir veritabanına bağlı olduğunuzda, tek bir kod bloku içinde

ardarda bir veritabanı işlemleri serisi yürütebilirsiniz. Aşağıdaki örnek bu tekniği gösterir:

var conn:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); // open the database conn.open(dbFile, OpenMode.UPDATE); // start a transaction conn.begin(); // add the customer record to the database var insertCustomer:SQLStatement = new SQLStatement(); insertCustomer.sqlConnection = conn; insertCustomer.text =

"INSERT INTO customers (firstName, lastName) " + "VALUES ('Bob', 'Jones')";

insertCustomer.execute(); var customerId:Number = insertCustomer.getResult().lastInsertRowID; // add a related phone number record for the customer var insertPhoneNumber:SQLStatement = new SQLStatement(); insertPhoneNumber.sqlConnection = conn; insertPhoneNumber.text =

"INSERT INTO customerPhoneNumbers (customerId, number) " + "VALUES (:customerId, '800-555-1234')";

insertPhoneNumber.parameters[":customerId"] = customerId; insertPhoneNumber.execute(); // commit the transaction conn.commit();

Gördüğünüz gibi, senkronize veya senkronize olmayan yürütme kullandığınızda veritabanı işlemlerini

gerçekleştirmek için aynı yöntemleri çağırırsınız. İki yaklaşım arasındaki temel fark, başka bir işleme bağlı olan bir

işlem yürütmek ve hataların işlenmesidir.

Page 190: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

183ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Başka bir işleme bağlı olan bir işlem yürütme

Senkronize yürütme modunu kullandığınızda, işlemin tamamlandığını belirlemek için bir olayı dinleyen kod

yazmanız gerekmez. Bunun yerine, bir kod satırındaki işlem başarıyla tamamlandığında yürütmenün bir sonraki kod

satırıyla devam ettiğini varsayabilirsiniz. Sonuç olarak, başka bir işlemin başarısına bağlı olan bir işlemi

gerçekleştirmek için, yalnızca bağlı olduğu işlemin hemen arkasından gelen bağımlı kodu yazmalısınız. Örneğin, bir

uygulamayı bir işlem başlatmak üzere kodlamak için INSERT ifadesini yürütün, eklenen satırın ana anahtarını alın, bu

ana anahtarı farklı bir tablodaki başla bir satıra ekleyin ve son olarak işlemi tamamlayın, kod bir ifadeler serisi olarak

yazılabilir. Aşağıdaki örnek bu işlemleri gösterir:

var conn:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); // open the database conn.open(dbFile, SQLMode.UPDATE); // start a transaction conn.begin(); // add the customer record to the database var insertCustomer:SQLStatement = new SQLStatement(); insertCustomer.sqlConnection = conn; insertCustomer.text =

"INSERT INTO customers (firstName, lastName) " + "VALUES ('Bob', 'Jones')";

insertCustomer.execute(); var customerId:Number = insertCustomer.getResult().lastInsertRowID; // add a related phone number record for the customer var insertPhoneNumber:SQLStatement = new SQLStatement(); insertPhoneNumber.sqlConnection = conn; insertPhoneNumber.text =

"INSERT INTO customerPhoneNumbers (customerId, number) " + "VALUES (:customerId, '800-555-1234')";

insertPhoneNumber.parameters[":customerId"] = customerId; insertPhoneNumber.execute(); // commit the transaction conn.commit();

Hataları senkronize yürütme ile işleme

Senkronize yürütme modunda, bir işlemin başarısız olduğunu belirlemeniz için herhangi bir hata olayını dinlemeniz

gerekmez. Bunun yerine, bir try..catch.. finally kod blokları serisinde hataları tetikleyebilecek olan herhangi bir

kodu sararsınız. Try blokunda hata veren kodu sararsınız. Ayrı catch bloklarındaki her hata türüne yanıt olarak

gerçekleştirilecek eylemleri yazın. Başarı veya hatadan bağımsız olarak her zaman yürütülmesini istediğiniz herhangi

bir kodu (örneğin, artık gerek duyulmayan bir veritabanı bağlantısını kapatma) bir finally blokuna yerleştirin.

Aşağıdaki örnek hata işleme için try..catch.. finally bloklarının kullanımını gösterir. Önceki örneği hata işleme

kodu ekleyerek devam ettirir:

Page 191: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

184ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

var conn:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath("DBSample.db"); // open the database conn.open(dbFile, SQLMode.UPDATE); // start a transaction conn.begin(); try {

// add the customer record to the database var insertCustomer:SQLStatement = new SQLStatement(); insertCustomer.sqlConnection = conn; insertCustomer.text =

"INSERT INTO customers (firstName, lastName)" + "VALUES ('Bob', 'Jones')";

insertCustomer.execute(); var customerId:Number = insertCustomer.getResult().lastInsertRowID; // add a related phone number record for the customer var insertPhoneNumber:SQLStatement = new SQLStatement(); insertPhoneNumber.sqlConnection = conn; insertPhoneNumber.text =

"INSERT INTO customerPhoneNumbers (customerId, number)" + "VALUES (:customerId, '800-555-1234')";

insertPhoneNumber.parameters[":customerId"] = customerId; insertPhoneNumber.execute(); // if we've gotten to this point without errors, commit the transaction conn.commit();

} catch (error:SQLError) {

// rollback the transaction conn.rollback();

}

Senkronize olmayan yürütme modelini anlama

Senkronize olmayan yürütme modunun kullanımına ilişkin yaygın bir kaygı, aynı veritabanı bağlantısına karşı başka

bir SQLStatement yürütülmekteyse, bir SQLStatement örneğini başlatamayacak olmanıza dair varsayımdır. Gerçekte,

bu varsayım doğru değildir. SQLStatement örneği yürütülürken ifadenin text özelliğini değiştiremezsiniz. Ancak,

yürütmek istediğiniz her farklı SQLStatement örneği için ayrı bir SQLStatement örneği kullanırsanız, başka bir

SQLStatement örneği hala yürütülüyorken hataya neden olmadan execute() yöntemini çağırabilirsiniz.

Dahili olarak senkronize olmayan yürütme modunu kullanarak veritabanı işlemleri yürüttüğünüzde, her veritabanı

bağlantısı (her SQLConnection örneği) gerçekleştirmesini söylediğiniz kendi işlem kuyruğu veya listesine sahiptir.

Çalışma zamanı her işlemi kuyruğa eklendikleri sırayla yürütür. Bir SQLStatement örneği oluşturduğunuzda ve bu

örneğin execute() yöntemini çağırdığınızda, ifade yürütme işlemi bağlantı için kuyruğa eklenir. Bu SQLConnection

örneğinde o anda yürütülen bir işlem yoksa, ifade arka planda yürütülmeye başlar. Kodla aynı blok içinde başka bir

SQLStatement örneği oluşturduğunuzu ve bu yöntemin execute() yöntemini de çağırdığınızı varsayın. Bu ikinci

ifade yürütme işlemi, kuyrukta ilk ifadenin arkasına eklenir. İlk ifadenin yürütülmesi tamamlanır tamamlanmaz,

çalışma zamanı kuyruktaki bir sonraki işleme geçer. Ana uygulama kodunda ilk işleme ilişkin result olayının

gönderildiği sırada bile, kuyrukta yer alan sonraki işlemlerin yürütülmesi arka planda devam eder. Aşağıdaki kod bu

tekniği gösterir:

Page 192: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

185ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

// Using asynchronous execution mode var stmt1:SQLStatement = new SQLStatement(); stmt1.sqlConnection = conn; // ... Set statement text and parameters, and register event listeners ... stmt1.execute(); // At this point stmt1's execute() operation is added to conn's execution queue. var stmt2:SQLStatement = new SQLStatement(); stmt2.sqlConnection = conn; // ... Set statement text and parameters, and register event listeners ... stmt2.execute(); // At this point stmt2's execute() operation is added to conn's execution queue. // When stmt1 finishes executing, stmt2 will immediately begin executing // in the background.

Ardarda kuyruğa alınan ifadeleri otomatik olarak yürüten veritabanının önemli bir yan etkisi vardır. Bir ifade başka

bir işlemin sonucuna bağlıysa, ilk işlem tamamlanana kadar bu ifadeyi kuyruğa ekleyemezsiniz (başka bir deyişle, bu

ifadenin execute() yöntemini çağıramazsınız). Çünkü ikinci ifadenin execute() yöntemini bir kez çağırdığınızda,

ifadenin text veya parameters özelliklerini değiştiremezsiniz. Bu durumda sonraki işlemi başlatmak için, ilk işlemin

tamamlandığını gösteren olayı beklemeniz gerekir. Örneğin, bir işlem bağlamında bir ifade yürütmek istiyorsanız,

ifadenin yürütülmesi bu işlemi açmaya ilişkin işleme bağlıdır. İşlemi açmak için SQLConnection.begin() yöntemini

çağırdıktan sonra SQLConnection örneğinin begin olayını göndermesini beklemeniz gerekir. Daha sonra

SQLStatement örneğinin execute() yöntemini çağırabilirsiniz. Bu örnekte uygulamayı işlemlerin düzgün biçimde

yürütülmesini sağlayacak biçimde düzenlemenin en basit yolu, begin olayı için dinleyici olarak kaydedilen bir yöntem

oluşturmaktır. SQLStatement.execute() yöntemini çağıracak kod, bu dinleyici yönteminin içine yerleştirilir.

SQL veritabanlarıyla çalışmak için stratejiler

Bir uygulamanın yerel SQL veritabanlarına erişmesi ve bu veritabanlarıyla çalışmasının çeşitli yolları vardır. Uygulama

tasarımı, uygulama kodunun düzenlenme biçimi, işlemlerin gerçekleştirilme sırası ve zamanlaması, vb. gibi konularda

farklılaşır. Seçtiğiniz teknikler, uygulamanızı geliştirmenin kolaylığı üzerinde etkili olabilir. Bu teknikler, uygulamayı

gelecekteki güncellemelerde değiştirmenin kolaylığını etkileyebilir. Uygulamanın kullanıcının bakış açısına göre ne

kadar iyi çalıştığı da bu tekniklere göre değişebilir.

Önceden doldurulmuş bir veritabanını dağıtma

Uygulamanızda bir AIR yerel SQL veritabanı kullandığınızda, uygulama tablolar, sütunlar, vb. içeren belirli bir yapıya

sahip bir veritabanı bekler. Bazı uygulamalar veritabanı dosyasının önceden veriyle doldurulmuş olmasını da bekler.

Veritabanının uygun bir yapıya sahip olmasını sağlamanın bir yolu veritabanını uygulama kodunda oluşturmaktır.

Uygulama yüklendiğinde, belirli bir konumdaki veritabanı dosyasının varlığını kontrol eder. Dosya mevcut değilse,

uygulama veritabanı dosyasını ve veritabanı yapısını oluşturmak, tabloları başlangıç verileriyle doldurmak için bir dizi

komut yürütür.

Veritabanını ve veritabanı tablolarını oluşturan kod genellikle karmaşıktır. Bu kod, uygulamanın yüklenen kullanım

ömründe genellikle yalnızca bir defa kullanılır, ancak yine de uygulamanın boyutuna ve karmaşıklığına katkıda

bulunur. Veritabanını, yapıyı ve verileri programlama yoluyla oluşturmaya alternatif olarak, uygulamanızla birlikte

önceden doldurulmuş bir veritabanını dağıtabilirsiniz. Önceden doldurulmuş bir veritabanı dağıtmak için, veritabanı

dosyasını uygulamanın AIR paketine dahil edin.

Page 193: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

186ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

AIR paketinde bulunan tüm dosyalar gibi, paketlenmiş bir veritabanı dosyası uygulama dizinine yüklenir

(File.applicationDirectory özelliğiyle temsil edilen dizin). Ancak, bu dizindeki dosyalar salt okunur dosyalardır.

AIR paketindeki dosyayı bir “şablon” veritabanı olarak kullanın. Kullanıcı uygulamayı ilk kez çalıştırdığında, orijinal

veritabanı dosyasını kullanıcının depo dizinine (veya başka bir konuma) kopyalayın ve uygulamada bu veritabanını

kullanın.

Veritabanı performansını iyileştirme

Adobe AIR'de yerleşik olan çeşitli teknikler, uygulamanızda veritabanı işlemlerinin performansını iyileştirmenize

olanak verir.

Burada açıklanan tekniklerin yanı sıra, bir SQL ifadesinin yazılış biçimi de veritabanı performansını etkileyebilir.

Belirli bir sonuç kümesi elde etmek amacıyla bir SQL SELECT ifadesi yazmanın genellikle birden çok yolu vardır. Bazı

durumlarda, farklı yaklaşımlar veritabanı motorunun daha çok veya daha az çalışmasını gerektirir. Veritabanı

performansını iyileştirmenin bu yönüne—daha iyi veritabanı performansına yönelik SQL ifadeleri tasarlama—Adobe

AIR belgelerinde değinilmemiştir.

Her SQL ifadesi için bir SQLStatement örneği kullanın

Bir SQL ifadesi yürütülmeden önce, çalışma zamanı ifadenin yürütülmesi için dahili olarak gerçekleştirilecek adımları

belirlemek üzere ifadeyi hazırlar (derler). Daha önce yürütülmemiş olan bir SQLStatement örneğinde

SQLStatement.execute() yöntemini çağırdığınızda, ifade yürütülmeden önce otomatik olarak hazırlanır. Daha

sonraki execute() yöntemi çağrılarında, SQLStatement.text özelliği değişmediği sürece, ifade hala hazır

durumdadır. Sonuç olarak, ifade daha hızlı yürütülür.

İfadelerin yeniden kullanılmasından maksimum fayda sağlamak için, ifade yürütmeleri arasında değerlerin değişmesi

gerekiyorsa, ifadenizi özelleştirmek için ifade parametrelerini kullanın. (İfade parametreleri,

SQLStatement.parameters ilişkilendirici dizi özelliği kullanılarak belirtilir.) SQLStatement örneğinin text

özelliğinin aksine, ifade parametrelerinin değerlerini değiştirdiğinizde, çalışma zamanının ifadeyi yeniden hazırlaması

gerekmez. İfadelerde parametre kullanma hakkında daha fazla bilgi için bkz. “İfadelerde parametreler kullanma”

sayfa 167.

Bir ifadenin hazırlanması ve yürütülmesi çaba gerektiren bir işlem olduğundan başlangıç verilerini önceden yüklemek

ve daha sonra diğer ifadeleri arka planda yürütmek, iyi bir stratejidir. Önce uygulamanın gerektirdiği verileri yükleyin.

Uygulamanızın ilk başlangıç işlemleri tamamlandığında veya uygulamadaki başka bir “boş” zamanda diğer ifadeleri

yürütün. Örneğin, uygulamanız ilk ekranı görüntülemek için veritabanına erişmiyorsa, bu ekran görüntülenene kadar

bekleyin, daha sonra veritabanı bağlantısını açın ve son olarak SQLStatement örneklerini oluşturup

yürütebildiklerinizi yürütün. Alternatif olarak, uygulamanızın başlar başlamaz belirli bir sorgunun sonucu gibi bazı

verileri görüntülediğini varsayın. Bu durumda, devam edin ve bu sorguya ilişkin SQLStatement örneğini yürütün.

Başlangıç verileri yüklendikten ve görüntülendikten sonra, diğer veritabanı işlemleri için SQLStatement örneklerini

oluşturun ve mümkünse diğer gerekli ifadeleri daha sonra yürütün.

Bir SQLStatement örneğini bir kez hazırlandıktan sonra yeniden kullandığınızda, uygulamanız bu SQLStatement

örneğibe bir başvuru tutmalıdır. Örneğe ilişkin bir başvuru tutmak için, değişkeni işlem kapsamlı değil, sınıf kapsamlı

bir değişken olarak belirtin. Bunu yapmanın iyi bir yolu, uygulamanızı SQL ifadesinin tek bir sınıfta sarılacağı biçimde

yapılandırmaktır. Bileşim halinde yürütülen bir ifade grubu da tek bir sınıfta sarılabilir. SQLStatement örneği veya

örnekleri bu sınıfın üye değişkenleri olarak tanımlandığında, sarma sınıfı örneği uygulamada bulunduğu sürece, bu

örnekler de kalıcı olur. Minimum düzeyde, örneğin bellekte kalması için işlevin dışında yer alan bir SQLStatement

örneği içeren bir değişken tanımlayabilirsiniz. Örneğin, SQLStatement örneğini ActionScript sınıfında yer alan bir üye

değişkeni veya bir JavaScript dosyasında yer alan, işlev olmayan bir değişken olarak belirleyin. Daha sonra, sorguyu

gerçekten yürütmek istediğinizde ifadenin parametre değerlerini ayarlayabilir ve execute() yöntemini

çağırabilirsiniz.

Page 194: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

187ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Birden çok işlemi bir işlemde gruplayın

Veri ekleme ve değiştirmeyi içeren çok sayıda SQL ifadesi yürüttüğünüzü varsayın (INSERT veya UPDATE ifadeleri).

Tüm ifadeleri açık bir işlem içinde yürüterek performansta önemli bir artış sağlayabilirsiniz. Açık olarak bir işlem

başlatmazsanız, ifadelerden her biri kendisine ait otomatik olarak oluşturulmuş işlemlerde çalışır. Her işlemin (her

ifadenin) yürütülmesi tamamlandığında, çalışma zamanı elde edilen verileri diskteki veritabanı dosyasına yazar. Diğer

taraftan, açık olarak bir işlem oluşturur ve ifadeleri bu işlem bağlamında yürütürseniz ne olacağını düşünün. Çalışma

zamanı bellekteki tüm değişiklikleri yapar, daha sonra işlem gerçekleştiğinde tüm değişiklikleri bir defada veritabanı

dosyasına yazar. Verilerin diske yazılması genellikle işlemin en zaman yoğunluklu bölümüdür. Sonuç olarak, her SQL

ifadesi için bir kez diske yazmak yerine bir defada yazmak, performansı önemli ölçüde artırabilir.

Çalışma zamanı işlemesini en aza indirin

Aşağıdaki tekniklerin kullanılması, veritabanı motoru tarafında gereksiz işlerin yapılmasını önler ve uygulamaların

daha yüksek performansla çalışmasını sağlar:

• İfadedeki tablo adlarının yanı sıra, veritabanı adlarını da her zaman açıkça belirtin. (Ana veritabanıysa “ana”

sözcüğünü kullanın). Örneğin, SELECT employeeId FROM main ifadesini kullanın.SELECT employeeId FROM

employees yerine employees. Veritabanı adının açıkça belirtilmesi, çalışma zamanının eşleşen tabloyu bulmak

için her veritabanını kontrol etmesini önler. Ayrıca çalışma zamanının yanlış veritabanını seçme olasılığını da

engeller. Bir SQLConnection yalnızca tek bir veritabanına bağlandığında bile bu kuralı uygulayın, çünkü

SQLConnection perde arkasında SQL ifadeleri aracılığıyla erişilebilen geçici bir veritabanına daha bağlıdır.

• Sütun adlarını her zaman SELECT or INSERT ifadesinde açıkça belirtin.

• Çok sayıda satır alan bir SELECT ifadesinin döndürdüğü satırları bölümleyin: bkz. “SELECT sonuçlarını bölümler

halinde alma” sayfa 173.

Şema değişikliklerinden kaçının

Veritabanı tablolarına veri ekledikten sonra mümkünse veritabanı şemasını (tablo yapısını) değiştirmekten kaçının.

Bir veritabanı dosyası, normalde dosya başlangıcında bulunan tablo tanımlarıyla yapılandırılır. Bir veritabanına

bağlantı açtığınızda, çalışma zamanı bu tanımları yükler. Veritabanı tablolarına veri eklediğinizde, bu veriler dosyaya

tablo tanım verilerinin ardından eklenir. Ancak, tabloya sütun eklemek veya yeni bir tablo eklemek gibi şema

değişiklikleri yaparsanız, yeni tablo tanım verileri veritabanı dosyasındaki tablo verileriyle karışır. Tablo tanım

verilerinin tümü veritabanı dosyasının başlangıcında değilse, çalışma zamanı tablo tanım verilerini dosyanın farklı

bölümlerinden okuduğu için bir veritabanı bağlantısı açmak çok uzun zaman alabilir.

Şema değişiklikleri yapmanız gerekiyorsa SQLConnection.compact() yöntemini değişiklikleri tamamladıktan sonra

çağırabilirsiniz. Bu işlem veritabanı dosyasını tablo tanım bilgilerinin bütün olarak dosyanın başlangıcında yer alacağı

biçimde yeniden yapılandırır. Ancak, compact() işlemi, veritabanı büyüdükçe daha çok zaman alabilir.

Yerel SQL veritabanlarıyla çalışmak için en iyi uygulamalar

Aşağıdaki liste, yerel SQL veritabanlarıyla çalışırken performansı, güvenliği ve uygulama bakımınızın kolaylığını

artırmak için kullanabileceğiniz, önerilen tekniklerin kümesidir. Veritabanı uygulamalarını iyileştirmeye yönelik ek

teknikler için bkz. “Veritabanı performansını iyileştirme” sayfa 186.

Veritabanı bağlantılarını önceden oluşturun

Uygulamanız ilk yüklendiğinde herhangi bir ifade yürütmese bile, bir SQLConnection nesnesini başlatın ve ifade

çalıştırma sırasında gecikmeleri önlemek için önceden (örneğin ilk uygulama başlangıcından sonra) bu nesnenin

open() veya openAsync() yöntemini çağırın. Bkz. “Veritabanına bağlanma” sayfa 164.

Page 195: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

188ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Yerel SQL veritabanlarıyla çalışma

Veritabanı bağlantılarını yeniden kullanma

Uygulamanızın yürütülmesi sırasında belirli bir veritabanına erişiyorsanız, SQLConnection örneğine ilişkin bir

başvuru tutun ve bağlantıyı kapatıp yeniden açmak yerine uygulama boyunca bu başvuruyu yeniden kullanın. Bkz.

“Veritabanına bağlanma” sayfa 164.

Senkronize olmayan yürütme modunu tercih edin

Veri erişim kodunu yazma sırasında işlemleri senkronize olarak yürütmek uygun görünebilir, çünkü senkronize

işlemleri kullanmak genellikle daha kısa ve daha az karmaşık kodlar gerektirir. Ancak, “Senkronize ve senkronize

olmayan veritabanı işlemlerini kullanma” sayfa 181 bölümünde açıklandığı gibi, senkronize işlemlerin performans

üzerinde kullanıcıların açıkça görebildiği, uygulamayı yavaşlatan bir etkisi vardır. Tek bir işlemin aldığı süre işleme ve

özellikle işlemin içerdiği veri miktarına göre değişir. Örneğin, veritabanına yalnızca bir satır ekleyen bir SQL INSERT

ifadesi, binlerce veri satırı alan bir SELECT ifadesinden çok daha az zaman alır. Ancak, birden çok işlemi

gerçekleştirmek için senkronize yürütmeyi kullandığınızda, işlemler genellikle yanyana dizilir. Tek bir işlemin aldığı

zaman çok kısa olsa bile, tüm senkronize işlem tamamlanana kadar uygulama donar. Sonuç olarak, yanyana dizilen

birden çok işlemin gerektirdiği birikimli süre, uygulamanızı durdurmak için yeterli olabilir.

Özellikle çok sayıda satır içeren işlemler için standart bir yaklaşım olan senkronize olmayan işlemleri kullanın.

“SELECT sonuçlarını bölümler halinde alma” sayfa 173 bölümünde anlatıldığı gibi, SELECT ifadesi sonuçları

işlemesinin bölümlenmesi için bir teknik mevcuttur. Ancak, bu teknik yalnızca senkronize olmayan yürütme

modunda kullanılabilir. Uygulamanızın kullanıcılarının karşılaşacağı performans dengelemelerini göz önüne

aldığınızda ve uygulamanızın performansının nasıl etkilendiğini göreceğiniz şekilde uygulamanızı test ettiğinizde,

senkronize işlemleri yalnızca belirli işlevlere senkronize olmayan programlamayla ulaşamadığınızda kullanmalısınız.

Senkronize olmayan yürütmenin kullanılması daha karmaşık kodlama içerebilir. Ancak, kodu yalnızca bir defa

yazmanız gerektiğini, ancak uygulama kullanıcılarının bu kodu hızlı veya yavaş biçimde defalarca kullanmak zorunda

olduklarını unutmayın.

Çoğu durumda, yürütülecek her SQL ifadesi için ayrı bir SQLStatement örneği kullanılarak, senkronize olmayan

kodun yazılma biçimi bakımından senkronize koda benzemesini sağlayacak şekilde, birden çok SQL işlemi bir defada

kuyruğa alınabilir. Daha fazla bilgi için bkz. “Senkronize olmayan yürütme modelini anlama” sayfa 184.

Ayrı SQL ifadeleri kullanın ve SQLStatement'ın text özelliğini değiştirmeyin.

Bir uygulamada bir defadan çok yürütülen bir SQL ifadesi için, her SQL ifadesine ilişkin ayrı bir SQLStatement örneği

oluşturun. SQLStatement örneğini SQL komutu her yürütüldüğünde kullanın. Örneğin, birçok defa gerçekleştirilecek

dört farklı SQL işlemi içeren bir uygulama oluşturduğunuzu varsayın. Bu durumda, dört ayrı SQLStatement örneği

oluşturun ve her ifadeyi yürütmek için bu ifadenin execute() yöntemini çağırın. Tüm SQL ifadeleri için tek bir

SQLStatement örneği kullanarak ifadenin her yürütülmesinden önce text özelliğini yeniden tanımlama

alternatifinden kaçının. Daha fazla bilgi için bkz. “Her SQL ifadesi için bir SQLStatement örneği kullanın” sayfa 186.

İfade parametreleri kullanın

SQLStatement parametreleri kullanın—kullanıcı girişini hiçbir zaman ifade metnine bitiştirmeyin. SQL yerleştirme

saldırıları olasılığını engellediğinden, parametre kullanmak uygulamanız için her zaman daha güvenlidir. Sorgularda

nesneleri kullanmayı (yalnızca SQL değişmez değerleri yerine) olanaklı kılar. Ayrıca, her yürütüldüklerinde yeniden

derlenmeleri gerekmeden yeniden kullanılabildiklerinden, ifadelerin daha verimli biçimde çalışmasını sağlar. Daha

fazla bilgi için bkz. “İfadelerde parametreler kullanma” sayfa 167.

Sütun ve parametre adları için sabitler kullanın.

SQLStatement için bir itemClass belirtmediğinizde, yazım hatalarını önlemek için tablonun sütun adlarını içeren

String sabitleri tanımlayın. Bu sabitleri sonuç nesnelerinden değerleri alırken özellik adları için ve ifade metinlerinde

kullanın. Sabitleri parametre adları için de kullanın.

Page 196: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

189

Bölüm 19: Şifreli verileri saklama

Adobe® AIR™ çalışma zamanı, kullanıcının bilgisayarında yüklü olan her AIR uygulaması için kalıcı şifreli yerel bir

depo sağlar. Bu sayede, kullanıcının yerel sabit sürücüsünde, şifresi başka kullanıcılar veya uygulamalar kullanılarak

kolay bir şekilde çözülemeyecek olan şifreli bir formatta saklanan verileri kaydedebilir ve alabilirsiniz. Her AIR

uygulaması için ayrı bir şifreli yerel depo kullanılır ve her AIR uygulaması, her bir kullanıcı için ayrı bir şifreli yerel

depo kullanır.

Web hizmetleri için oturum açma kimlik bilgileri gibi güvenceye alınması gereken bilgileri saklamak için şifreli yerel

depoyu kullanmak isteyebilirsiniz.

AIR, şifreli yerel depoyu her uygulamayla ve kullanıcıyla ilişkilendirmek için Windows'ta DPAPI ve Mac OS'de

KeyChain kullanır. Şifreli yerel depo AES-CBC 128-bit şifreleme kullanır.

Şifreli yerel depodaki bilgiler yalnızca uygulama güvenliği sanal alanındaki AIR uygulama içeriği tarafından

kullanılabilir.

Yerel depodan veri saklamak ve almak için, EncryptedLocalStore sınıfının setItem() ve removeItem() statik

yöntemlerini kullanın. Veriler, verileri bayt dizileri olarak saklayan ve dizeleri anahtar olarak kullanan karma bir

tabloda saklanır.

Örneğin aşağıdaki kod bir dizeyi şifreli yerel depoda saklar:

var str:String = "Bob"; var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(str); EncryptedLocalStore.setItem("firstName", bytes); var storedValue:ByteArray = EncryptedLocalStore.getItem("firstName"); trace(storedValue.readUTFBytes(storedValue.length)); // "Bob"

setItem() yönteminin üçüncü parametresi olan stronglyBound isteğe bağlıdır. Bu parametre true olarak ayarlı

olduğunda, şu durumlarda, saklanan öğeyi yayıncı kimliğinin yanı sıra saklayan AIR uygulamasının dijital imzasına

ve bitlerine ciltleyen şifreli yerel depo, daha yüksek bir güvenlik düzeyi sağlar:

var str:String = "Bob"; var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(str); EncryptedLocalStore.setItem("firstName", bytes, true);

stronglyBoundtrue olarak ayarlıyken saklanan bir öğe için, getItem() öğesine yapılan sonraki çağrılar yalnızca

çağıran AIR uygulaması saklayan uygulamayla aynıysa başarılı olur (uygulama dizininde bulunan dosyalardaki hiçbir

veri değiştirilmemişse). Çağıran AIR uygulaması saklayan uygulamadan farklıysa, güçlü şekilde bağlı bir öğe için

getItem() öğesini çağırdığınızda uygulama bir Hata istisnası atar. Uygulamanızı güncellerseniz, şifreli yerel depoya

önceden yazılmış olan güçlü şekilde bağlı verileri okuyamaz.

AIR uygulaması varsayılan olarak başka bir uygulamanın şifreli yerel deposunu okuyamaz. stronglyBoundayarı

fazladan bağlama (uygulama bitlerindeki verilere) sağlar, bu da saldırgan bir uygulamanın, uygulamanızın yayıncı

kimliğini çalmaya çalışarak uygulamanızın şifreli yerel deposundan okuma girişiminde bulunmasını engeller.

Bir uygulamayı farklı bir imzalayıcı sertifikası kullanacak şekilde güncellerseniz (bir geçiş imzası kullanarak),

stronglyBound parametresi false olarak ayarlı olsa bile, güncellenen sürüm orijinal depodaki öğelerin hiçbirine

erişemeyecektir. Daha fazla bilgi için bkz. “Sertifikaları değiştirme” sayfa 287.

Page 197: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

190ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Şifreli verileri saklama

EncryptedLocalStore.removeItem() yöntemini kullanarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan bir

değer silebilirsiniz:

EncryptedLocalStore.removeItem("firstName");

EncryptedLocalStore.reset() yöntemini çağırarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan tüm

verileri temizleyebilirsiniz:

EncryptedLocalStore.reset();

AIR Hata Ayıklama Başlatıcısı'nda (ADL) bir uygulamanın hatalarını ayıklarken, uygulama, uygulamanın yüklü

sürümünde kullanılandan farklı bir şifreli yerel depo kullanır.

Saklanılan verilerin boyutu 10MB'ı geçerse şifreli yerel depo yavaş çalışabilir.

Bir AIR uygulamasını kaldırdığınızda, kaldırma uygulaması şifreli yerel depoda saklanan verileri silmez.

Şifreli yerel depo verileri kullanıcının uygulama verileri dizininin alt dizinine konur; alt dizin yolu arkasından

uygulama kimliği gelmek üzere Adobe/AIR/ELS/ şeklindedir.

Page 198: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

191

Bölüm 20: HTML ortamı hakkında

Adobe®AIR™, aynı zamanda Safari web tarayıcısı tarafından da HTML ve JavaScript içeriğini ayrıştırmak, düzenlemek

ve oluşturmak için kullanılan WebKit'i (www.webkit.org) kullanır. AIR API'lerinin HTML içeriğinde kullanımı isteğe

bağlıdır. Yalnızca HTML ve JavaScript ile, HTMLLoader nesnesinin veya HTML penceresinin içeriğinde

programlama yapabilirsiniz. Var olan birçok HTML sayfası ve uygulaması birkaç değişiklikle çalışmalarını

sürdürmelidir (WebKit ile uyumlu HTML, CSS, DOM ve JavaScript özellikleri kullandıklarını varsayarak).

AIR uygulamaları dosya sistemine tam erişimle doğrudan masaüstünde çalıştığı için, HTML içeriğinin güvenlik

modeli, tipik bir web tarayıcısının güvenlik modelinden daha katıdır. AIR'de, yalnızca uygulama yükleme dizininden

yüklenen veriler uygulama sanal alanına yerleştirilir. Uygulama sanal alanı en yüksek düzeyde ayrıcalığa sahiptir ve

AIR API'lerine erişim sağlar. AIR, nereden geldiğini temel alarak diğer içeriği ayrı sanal alanlara yerleştirir. Dosya

sisteminden yüklenen dosyalar yerel bir sanal alana gider. Ağdan http: veya https: protokolleri kullanılarak yüklenen

dosyalar, uzak sunucunun etki alanını temel alarak bir sanal alana gider. Bu uygulama dışı sanal alanlardaki içeriğin

herhangi bir AIR API'sine erişmesi yasaktır ve tipik bir web tarayıcısında olduğu gibi çalışır.

AIR, aynı zamanda Safari web tarayıcısı tarafından da HTML ve JavaScript içeriğini ayrıştırmak, düzenlemek ve

oluşturmak için kullanılan WebKit'i (www.webkit.org) kullanır. AIR yerleşik ana bilgisayar sınıfları ve nesneleri,

masaüstü uygulamalarıyla genelde ilişkilendirilen özelliklere yönelik bir API sağlar. Bu özellikler dosyaları okuma,

dosyalara yazma ve pencereleri yönetmeyi içerir. Adobe AIR ayrıca aralarında ses soketleri ve ikili soketler de bulunan

Adobe® Flash® Player'ın API'lerini miras alır.

Alfa, ölçekleme veya saydamlık ayarları uygulanırsa, AIR'deki HTML içeriği SWF veya PDF içeriğini görüntülemez.

Daha fazla bilgi için bkz. HTML sayfasında SWF veya PDF içeriğini yüklerken dikkate alınacak noktalarve “Pencere

şeffaflığı” sayfa 57.

HTML ortamına genel bakış

Adobe AIR, HTML oluşturucu, belge nesnesi modeli ve JavaScript yorumlayıcısıyla beraber eksiksiz bir tarayıcı

benzeri JavaScript ortamı sağlar. JavaScript ortamı, AIR HTMLLoader sınıfı tarafından temsil edilir. HTML

pencerelerinde, HTMLLoader nesnesi tüm HTML içeriğini kapsar ve bunun karşılığında NativeWindow nesnesinde

de bulunur. SWF içeriğinde Sprite sınıfını genişleten HTMLLoader sınıfı, diğer görüntüleme nesneleri gibi, bir

sahnenin görüntüleme listesine eklenebilir. Sınıfın ActionScript™ özellikleri, “HTML Kabı için Komut Dosyası

Oluşturma” sayfa 230 ve ayrıca Flex 3 ActionScript Dil Başvurusu bölümlerinde anlatılmaktadır.

JavaScript ortamı ve AIR ile ilişkisi hakkında

Aşağıdaki diyagram JavaScript ortamı ve AIR çalışma zamanı ortamı arasındaki ilişkiyi anlatmaktadır. Yalnızca tek bir

yerel pencere gösterilmesine rağmen, AIR uygulaması birden çok pencereyi içerebilir. (Ve tek bir pencere birden çok

HTMLLoader nesnesi içerebilir.)

Page 199: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

192ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

JavaScript ortamı kendi Document ve Window nesnelerine sahiptir. JavaScript kodu AIR çalışma zamanı ortamıyla etkileşime çalışma zamanını, nativeWindow ve htmlLoader özelliklerini kullanarak geçebilir. ActionScript kodu JavaScript ortamıyla etkileşime, JavaScript Window nesnesine bir başvuru olan HTMLLoader nesnesinin pencere özelliğini kullanarak geçebilir. Ayrıca hem ActionScript hem de JavaScript nesneleri, AIR ve JavaScript nesnelerinin her ikisi tarafından da gönderilen olayları dinleyebilir.

runtime özelliği, AIR API sınıflarına erişim sağlar ve access sınıfı (statik de denir) üyelerinin yanı sıra, yeni AIR

nesneleri oluşturmanızı da sağlar. Bir AIR API'sine erişmek için, sınıfın adını paketle beraber runtime özelliğine

eklersiniz. Örneğin bir File nesnesi oluşturmak için, şu ifadeyi kullanırsınız:

var file = new window.runtime.filesystem.File();

Not: AIR SDK bir JavaScript dosyası sağlar, AIRAliases.js, bu dosya en yaygın kullanılan AIR sınıfları için daha

uygun başka adlar tanımlar. Bu dosyayı içe aktardıktan sonra, window.runtime.package.Class yerine daha kısa bir

biçim olan air.Class'ı kullanabilirsiniz. Örneğin File nesnesini new air.File() ile oluşturabilirsiniz.

NativeWindow nesnesi, masaüstü penceresini kontrol etmeye yönelik özellikler sağlar. Bir HTML sayfasından,

window.nativeWindow özelliğine sahip NativeWindow nesnesine erişebilirsiniz.

HTMLLoader nesnesi içeriğin nasıl yüklendiğine ve oluşturulduğuna dair özellikler, yöntemler ve olaylar sağlar. Bir

HTML sayfasından, window.htmlLoader özelliğine sahip üst HTMLLoader nesnesine erişebilirsiniz.

Önemli: Yalnızca bir uygulamanın parçası olan sayfalar üst düzey belge olarak yüklendiklerinde, htmlLoader,

nativeWindow veya runtime özelliklerine sahip olur. Bu özellikler belge bir kareye veya iframe'e yüklendiğinde

eklenmez. (Alt belge, aynı güvenlik sanal alanında olduğu sürece üst belgedeki bu özelliklere erişebilir. Örneğin bir kareye

yüklenmiş olan belge, üst öğesinin runtime özelliğine parent.runtime ile erişebilir.)

AIR Run-time Environment

NativeWindow

HTMLLoader

JavaScriptEnvironment

window

window

window

body

h1 div

p

table

head

htmlLoader

native4Window

runtime

Page 200: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

193ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Güvenlik hakkında

AIR, kaynağın etki alanına dayalı olarak bir güvenlik sanal alanındaki tüm kodu çalıştırır. Uygulama yükleme

dizininden yüklenen içerikle sınırlı olan uygulama içeriği, uygulama sanal alanına yerleştirilir. Çalışma zamanı

ortamına ve AIR API'lerine erişim yalnızca bu sanal alanın içinden HTML ve JavaScript'in çalıştırılmasıyla

mümkündür. Aynı zamanda, load olayı sayfası için tüm işleyiciler geri döndükten sonra, en dinamik JavaScript

değerlendirmesi ve çalışması uygulama sanal alanında engellenir.

Bir uygulama sayfasını, sayfayı bir kareye veya iframe'e yükleyerek ve karenin AIR'e özgü sandboxRoot ve

documentRoot niteliklerini ayarlayarak uygulama olmayan sanal alana eşleyebilirsiniz. sandboxRoot değerini gerçek

bir uzak etki alanına ayarlayarak, bu alandaki içeriği çapraz komut dosyasına yazmak üzere sanal alana sahip içeriği

etkinleştirebilirsiniz. Sayfaları bu şekilde eşlemek, içerik birleştirme uygulamasında olduğu gibi uzak içeriği yüklerken

ve komut dosyasına yazarken yararlı olabilir.

Uygulama içeriğinin ve uygulama olmayan içeriğin birbirlerinin çapraz dosyasını oluşturmasını sağlamanın bir başka

yolu ve aynı zamanda AIR API'lerine uygulama olmayan içerik erişimi vermenin tek yolu, sanal alan köprüsü

oluşturmaktır. Üst-alt köprüsü bir alt karedeki, iframe'deki veya penceredeki içeriğin, uygulama sanal alanında

tanımlanan belirli yöntemlere ve özelliklere erişmesini sağlar. Tersine, alt-üst köprüsü, uygulama içeriğinin alt öğenin

sanal alanında tanımlanan belirli yöntemlere ve özelliklere erişmesini sağlar. Sanal alan köprüleri, window nesnesinin

parentSandboxBridge ve childSandboxBridge özellikleri ayarlanarak kurulur. Daha fazla bilgi için bkz. “HTML

güvenliği” sayfa 29 ve “HTML kare ve iframe öğeleri” sayfa 201.

Eklentiler ve gömülü nesneler hakkında

AIR, Adobe® Acrobat® eklentisini destekler. Kullanıcıların PDF içeriğini görüntülemek için Acrobat veya Adobe®

Reader® 8.1 (veya daha üst) sürümüne sahip olmaları gerekmektedir. HTMLLoader nesnesi, kullanıcı sisteminin

PDF'leri görüntüleyip görüntülemediğini kontrol etmeye yarayan bir özellik sağlar. SWF dosya içeriği HTML

ortamında da görüntülenebilir, ancak bu özellik AIR'de yerleşiktir ve harici bir eklenti kullanmaz.

Diğer Webkit eklentileri AIR'de desteklenmez.

Ayrıca bkz.

“HTML güvenliği” sayfa 29

“HTML Sanal Alanları” sayfa 194

“HTML kare ve iframe öğeleri” sayfa 201

“JavaScript Window nesnesi” sayfa 199

“XMLHttpRequest nesnesi” sayfa 195

“PDF içeriği ekleme” sayfa 244

AIR ve Webkit uzantıları

Adobe AIR, Safari web tarayıcısında da kullanılan açık kaynak Webkit motorunu kullanır. AIR, güvenlik nedenlerinin

yanı sıra, runtime sınıflarına ve nesnelerine erişim sağlamak için birçok uzantı eklemesi yapar. Ayrıca Webkit de

HTML, CSS ve JavaScript için W3C standartlarında bulunmayan özellikler ekler.

Page 201: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

194ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Burada yalnızca AIR eklemeleri ve en önemli Webkit uzantıları ele alınmaktadır; standart olmayan HTML, CSS ve

JavaScript ile ilgili ek belgeler için bkz. www.webkit.org ve developer.apple.com. Standart bilgiler için bkz. W3C

website. Mozilla ayrıca HTML, CSS ve DOM konularında önemli bir genel başvuru sağlar (elbette Webkit ve Mozilla

motorları aynı değildir).

Not: AIR şu standart ve genişletilmiş WebKit özelliklerini desteklemez: JavaScript Window nesnesi print() yöntemi;

Acrobat ve Adobe Reader 8.1+ dışındaki eklentiler; Ölçeklenebilir Vektör Grafikleri (SVG), CSS opacity özelliği.

AIR'de JavaScript

AIR, ortak JavaScript nesnelerinin tipik davranışında birçok değişiklik yapar. Bu değişikliklerin birçoğu AIR'de

güvenli uygulamaların yazılmasını kolaylaştırmak için yapılır. Aynı zamanda, davranıştaki bu farklılıklar, bazı ortak

JavaScript kodlama desenlerinin ve bu desenleri kullanan mevcut web uygulamalarının her zaman AIR'de beklendiği

gibi çalıştırılamayabileceği anlamına gelir. Bu tür sorunların düzeltilmesiyle ilgili bilgi için bkz. “Güvenlik ilişkili

JavaScript hatalarını önleme” sayfa 207.

HTML Sanal Alanları

AIR içeriği kaynağına bağlı olarak, ayrı sanal alanlara yerleştirir. Sanal alan kuralları, Adobe Flash Player tarafından

uygulanan sanal alan kurallarının yanı sıra, çoğu web tarayıcısı tarafından uygulanan aynı kaynak ilkesiyle tutarlıdır.

Ayrıca AIR, uygulama içeriğini dahil etmek ve korumak için yeni bir uygulama sanal alan türü sağlar. AIR

uygulamaları geliştirirken karşılaşabileceğiniz sanal alan türleriyle ilgili daha fazla bilgi için bkz. “Sanal alanlar”

sayfa 26.

Çalışma zamanı ortamına ve AIR API'lerine erişim yalnızca uygulama sanal alanının içinden HTML ve JavaScript'in

çalıştırılmasıyla mümkündür. Ancak aynı zamanda çeşitli biçimlerdeki dinamik JavaScript değerlendirmesi ve

çalışması, güvenlik nedenleriyle büyük ölçüde uygulama sanal alanıyla sınırlıdır. Bu kısıtlamalar, uygulamanız

doğrudan bir sunucudan bilgi yüklese de yüklemese de geçerlidir. (Hatta dosya içeriği, yapıştırılan dizeler ve doğrudan

kullanıcı girişi güvenilmez olabilir.)

Bir sayfadaki içeriğin kaynağı, gönderildiği sanal alanı belirler. Yalnızca uygulama dizininden yüklenen içerik (uyg.:

URL şeması tarafından başvurulan yükleme dizini) uygulama sanal alanına yerleştirilir. Dosya sisteminden yüklenen

içerik local-with-filesystem veya local-trusted sanal alana yerleştirilir, böylece yerel dosya sistemindeki içeriğe erişimine

ve bu içerikle etkileşimine izin verilir, ancak uzak içeriğe erişimine veya uzak içerikle etkileşimine izin verilmez. Ağdan

yüklenen içerik, kaynak etki alanına karşılık gelen uzak bir sanal alana yerleştirilir.

Bir uygulama sayfasının uzak sanal alandaki içerikle serbestçe etkileşmesini sağlamak için, sayfa, uzak içerikle aynı etki

alanına eşlenebilir. Örneğin bir Internet hizmetinden eşleme verileri görüntüleyen bir uygulama yazarsanız,

uygulamanızın hizmetten içerik yükleyen ve görüntüleyen sayfası hizmet etki alanına eşlenebilir. Sayfaları uzak sanal

alana ve etki alanına eşleme nitelikleri, kare ve iframe HTML öğelerine eklenen yeni niteliklerdir.

Uygulama dışı bir sanal alandaki içeriğin AIR özelliklerini güvenli bir şekilde kullanmasını sağlamak için, üst sanal

alan köprüsü kurabilirsiniz. Uygulama içeriğinin yöntemleri güvenli bir şekilde çağırmasını ve diğer sanal alanlardaki

içeriğin özelliklerine erişmesini sağlamak için, alt sanal alan köprüsü kurabilirsiniz. Güvenli burada uzak içeriğin açık

olmayan nesnelere, özelliklere veya yöntemlere yanlışlıkla başvuru alamaması anlamına gelir. Yalnızca basit veri

türleri, işlevler ve adsız nesneler köprüden geçirilebilir. Ancak yine de tehlikeli olabilecek işlevleri açmaktan

kaçınmalısınız. Örneğin, bir kullanıcının sisteminde bulunan dosyaları okumayı ve dosyalara yazmayı sağlayan bir

arabirimi açtıysanız, uzak içeriğe, kullanıcılarınıza önemli zararlar verebileceği bir yöntem sağlıyor olabilirsiniz.

Page 202: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

195ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

JavaScript eval() işlevi

Sayfa, yükleme işlemini bitirdiğinde, eval() işlevinin kullanımı uygulama sanal alanıyla sınırlanır. Bazı kullanımlara

izin verilir ve böylece JSON formatlı veriler güvenli bir şekilde ayrıştırılabilir, ancak çalıştırılabilir bir ifadeyle

sonuçlanan herhangi bir değerlendirme hatayla sonuçlanır. “Farklı sanal alanlardaki içerik için kod kısıtlamaları”

sayfa 31, eval() işlevinin izin verilen kullanımlarını açıklar.

İşlev yapıcıları

Uygulama sanal alanında, bir sayfa yükleme işlemini bitirmeden önce işlev yapıcıları kullanılabilir. Tüm sayfa load

olayı işleyicileri bittikten sonra, yeni işlevler oluşturulamaz.

Harici komut dosyalarını yükleme

Uygulama sanal alanındaki HTML sayfaları, JavaScript dosyalarını uygulama dizininin dışından yüklemek için komut

dosyası etiketini kullanamaz. Uygulamanızdaki bir sayfaya uygulama dizininin dışından bir komut dosyası

yüklenmesi için,, sayfa uygulama dışı bir sanal alana eşlenmelidir.

XMLHttpRequest nesnesi

AIR, uygulamaların veri istekleri gerçekleştirebilmek için kullanabileceği bir XMLHttpRequest (XHR) nesnesi sağlar.

Aşağıdaki örnek basit bir veri isteğini gösterir:

xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", "http:/www.example.com/file.data", true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { //do something with data... } } xmlhttp.send(null);

Bir tarayıcıya karşılık AIR, uygulama sanal alanında çalışan içeriğin herhangi bir etki alanından veri isteğinde

bulunmasına olanak tanır. Bir JSON dizesi içeren XHR'nin sonucu, sonuç çalıştırılabilir kod içermediği sürece veri

nesneleri olarak değerlendirilebilir. XHR sonucunda çalıştırılabilir ifadeler mevcutsa, bir hata verilir ve değerlendirme

denemesi başarısız olur.

Uzak kaynaklardaki kodun yanlışlıkla dahil edilmesini engellemek için bu işlem sayfa, yükleme işlemini bitirmeden

önce yapılırsa senkronize XHR'ler boş bir sonuç döndürür. Senkronize olmayan XHR'ler her zaman bir sayfa

yüklendikten sonra geri döner.

Varsayılan olarak AIR, uygulama dışı sanal alanlardaki etki alanları arası XMLHttpRequest öğelerini engeller.

Uygulama sanal alanındaki bir üst pencere, uygulama dışı sanal alanda içeriğe sahip olan bir alt karedeki etki alanları

arası isteklere, AIR tarafından eklenen bir nitelik olan allowCrossDomainXHR öğesini içeriğe sahip olan kare veya

iframe öğesini true olarak ayarlayarak izin vermeyi seçebilir:

<iframe id="mashup" src="http://www.example.com/map.html" allowCrossDomainXHR="true" </iframe>

Not: Uygun olduğunda, AIR URLStream sınıfı da veri yüklemek için kullanılabilir.

Bir XMLHttpRequest öğesini uzak sanal alana eşlenmiş uygulama içeriğine sahip olan kareden veya iframe'den uzak

bir sunucuya gönderirseniz, eşleme URL'sinin XHR'de kullanılan sunucu adresini maskelemediğinden emin olun.

Örneğin example.com etki alanı için uygulama içeriğini uzak bir sanal alana eşleyen aşağıdaki iframe tanımını göz

önünde bulundurun:

Page 203: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

196ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

<iframe id="mashup" src="http://www.example.com/map.html" documentRoot="app:/sandbox/" sandboxRoot="http://www.example.com/" allowCrossDomainXHR="true" </iframe>

sandboxRoot niteliği www.example.com adresinin kök URL'sini yeniden eşlediği için, tüm istekler uzak sunucudan

değil, uygulama dizininden yüklenir. Sayfa gezinmesinden veya XMLHttpRequest öğesinden türetilen istekler yeniden

eşlenir.

Uzak sunucunuza yapılan veri isteklerini yanlışlıkla engellemeyi önlemek için, sandboxRoot öğesini köke değil, uzak

URL'nin alt dizinine eşleyin. Dizinin mevcut olması gerekmez. Örneğin, uygulama dizini yerine uzak sunucudan

yükleme yapabilmek için www.example.com adresine yapılan veri isteklerine izin vermek üzere, önceki iframe'i şu

şekilde değiştirin:

<iframe id="mashup" src="http://www.example.com/map.html" documentRoot="app:/sandbox/" sandboxRoot="http://www.example.com/air/" allowCrossDomainXHR="true" </iframe>

Bu durumda yalnızca air alt dizinindeki içerik yerel olarak yüklenir.

Sanal alan eşlemesiyle ilgili daha fazla bilgi için bkz. “HTML kare ve iframe öğeleri” sayfa 201 ve “HTML güvenliği”

sayfa 29.

Canvas nesnesi

Canvas nesnesi çizgi, yay, elips, çokgen gibi geometrik şekilleri çizmeye yarayan bir API tanımlar. Tuval API'sini

kullanmak için öncelikle belgeye bir tuval öğesi ekler ve JavaScript Canvas API'sini kullanarak tuvalde çizim

yaparsınız. Diğer birçok yönüyle Canvas nesnesi bir görüntü gibi davranır.

Aşağıdaki örnek Canvas nesnesi kullanarak bir üçgen çizer:

<html> <body> <canvas id="triangleCanvas" style="width:40px; height:40px;"></canvas> <script> var canvas = document.getElementById("triangleCanvas"); var context = canvas.getContext("2d"); context.lineWidth = 3; context.strokeStyle = "#457232"; context.beginPath(); context.moveTo(5,5); context.lineTo(35,5); context.lineTo(20,35); context.lineTo(5,5); context.lineTo(6,5); context.stroke(); </script> </body> </html>

Page 204: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

197ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Tuval API'siyle ilgili daha fazla belge için bkz. Apple Safari JavaScript Reference (Safari JavaScript Başvurusu). Webkit

projesinin yakın bir zamanda, Web Hypertext Application Technology Working Group (WHATWG) (Web Köprü

Metni Uygulama Teknolojisi Çalışma Grubu) ve W3C tarafından önerilen HTML 5 Working Draft (HTML 5 Çalışma

Taslağı) üzerinde standartlaştırma amacıyla Canvas API'sini değiştirmeye başladığını göz önünde bulundurun. Bunun

bir sonucu olarak Safari JavaScript Başvurusu'ndaki bazı belgeler, AIR'de bulunan tuvalin sürümüyle tutarsız olabilir.

Tanımlama Bilgileri

AIR uygulamalarında yalnızca uzak sanal alanlardaki içerik (http: ve https: kaynaklarından yüklenen), tanımlama

bilgilerini kullanabilir (document.cookie özelliği). Uygulama sanal alanında AIR API'leri, kalıcı verilerin

(EncryptedLocalStore ve FileStream sınıfları gibi) depolanması için başka yöntemler sağlar.

Clipboard nesnesi

WebKit Clipboard API'si şu olaylarla yürütülür: copy, cut ve paste. Bu olaylarda geçen olay nesnesi clipboardData

özelliğiyle panoya erişim sağlar. Pano verilerini okumak veya bu verileri yazmak için aşağıdaki clipboardData

nesnesi yöntemlerini kullanın:

Uygulama sanal alanının dışındaki JavaScript kodu panoya yalnızca bu olayları kullanarak erişebilir. Ancak uygulama

sanal alanındaki içerik, AIR Clipboard sınıfını kullanarak sistem panosuna doğrudan erişebilir. Örneğin panodaki

metin formatı verilerini almak için aşağıdaki ifadeyi kullanabilirsiniz:

var clipping = air.Clipboard.generalClipboard.getData("text/plain", air.ClipboardTransferMode.ORIGINAL_ONLY);

Geçerli veri MIME türleri şunlardır:

Önemli: Yalnızca uygulama sanal alanındaki içerik panoda bulunan dosya verilerine erişebilir. Uygulama dışı içerik

panodaki bir file nesnesine erişme girişiminde bulunursa, bir güvenlik hatası verilir.

Panoyu kullanmayla ilgili daha fazla bilgi için bkz. “Kopyalama ve yapıştırma” sayfa 137 ve Using the Pasteboard from

JavaScript (Apple Geliştirici Merkezi) (JavaScript'te Yapıştırma Alanı'nı Kullanma).

Yöntem Açıklama

clearData(mimeType) Pano verilerini temizler. mimeType parametresini temizlenecek verilerin MIME türüne ayarlayın.

getData(mimeType) Pano verilerini alır. Bu yöntem yalnızca paste olayının işleyicisinde çağrılabilir. mimeType parametresini geri

döndürülecek verilerin MIME türüne ayarlayın.

setData(mimeType, data) Verileri panoya kopyalar. mimeType parametresini verilerin MIME türüne ayarlayın.

MIME türü Değer

Metin "text/plain"

HTML "text/html"

URL "text/uri-list"

Bitmap "image/x-vnd.adobe.air.bitmap"

Dosya listesi "application/x-vnd.adobe.air.file-list"

Page 205: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

198ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Sürükle ve Bırak

HTML'e doğru veya HTML'den sürükle ve bırak hareketleri şu DOM olaylarını üretir: dragstart, drag, dragend,

dragenter, dragover, dragleave ve drop. Bu olaylarda geçen olay nesnesi, dataTransfer özelliğiyle sürüklenen

verilere erişim sağlar. dataTransfer özelliği, bir clipboard olayıyla ilişkilendirilen clipboardData nesnesiyle aynı

yöntemleri sağlayan bir nesneye başvurur. Örneğin bir drop olayından metin formatı verileri almak için şu işlevi

kullanabilirsiniz:

function onDrop(dragEvent){ return dragEvent.dataTransfer.getData("text/plain", air.ClipboardTransferMode.ORIGINAL_ONLY); }

dataTransfer nesnesinin sahip olduğu önemli üyeler şunlardır:

AIR uygulamasına sürükle ve bırak eylemine yönelik destek eklemeyle ilgili daha fazla bilgi için bkz. “Sürükle ve bırak”

sayfa 122 ve Using the Drag-and-Drop from JavaScript (Apple Geliştirici Merkezi) (JavaScript'te Sürükleme ve

Bırakmayı Kullanma).

innerHTML ve outerHTML özellikleri

AIR, uygulama sanal alanında çalışan içerik için innerHTML ve outerHTML özelliklerinin kullanılmasına yönelik

güvenlik kısıtlamaları getirir. load olayı işleyicilerinin çalıştırılması sırasında ve sayfa load olayından önce, innerHTML

ve outerHTML özelliklerinin kullanımında hiçbir kısıtlama yoktur. Ancak sayfa yüklendikten sonra, innerHTML veya

outerHTML özelliklerini yalnızca belgeye statik içerik eklemek için kullanabilirsiniz. Çalıştırılabilir kod olarak

değerlendirilen innerHTML veya outerHTML özelliklerine atanan bir dizede bulunan herhangi bir ifade yoksayılır.

Örneğin bir olay geri çağırma niteliğini öğe tanımına dahil ederseniz, olay dinleyicisi eklenmez. Benzer şekilde,

gömülü <script> etiketleri de değerlendirilmez. Daha fazla bilgi için bkz. “HTML güvenliği” sayfa 29.

Document.write() ve Document.writeln() yöntemleri

Sayfanın load olayından önce uygulama sanal alanında write() ve writeln() yöntemlerinin kullanımı kısıtlı

değildir. Ancak sayfa yüklendikten sonra, bu yöntemlerden birini çağırmak sayfayı temizlemez veya yeni bir sayfa

oluşturmaz. Birçok web tarayıcısında olduğu gibi, bir sayfa yüklenmesini bitirdikten sonra uygulama dışı sanal alanda

document.write() veya writeln() yöntemini çağırmak geçerli sayfayı temizler ve yeni, boş bir sayfa açar.

Üye Açıklama

clearData(mimeType) Verileri temizler. mimeType parametresini temizlenecek veri temsilinin MIME türüne ayarlayın.

getData(mimeType) Sürüklenen verileri alır. Bu yöntem yalnızca drop olayının işleyicisinde çağrılabilir. mimeType parametresini

alınacak verilerin MIME türüne ayarlayın.

setData(mimeType, data) Sürüklenecek verileri ayarlayın. mimeType parametresini verilerin MIME türüne ayarlayın.

türler Şu anda dataTransfer nesnesinde kullanılabilir olan tüm veri temsillerinin MIME türlerini içeren dizeler

dizisi.

effectsAllowed Sürüklenen verilerin kopyalanabileceğini, taşınabileceğini, verilere link verilebileceğini veya bunların bir

kombinasyonunun uygulanabileceğini belirtir. effectsAllowed özelliğini, dragstart olayının

işleyicisinde ayarlayın.

dropEffect İzin verilerin bırakma efektlerinden hangilerinin sürükleme hedefi tarafından desteklendiğini belirtir.

dropEffect özelliğini dragEnter olayının işleyicisinde ayarlayın. Sürükleme sırasında imleç, kullanıcının

fareyi bırakması durumunda hangi efektin oluşacağını göstermek için değişir. dropEffect belirtilmezse,

effectsAllowed özellik efekti seçilir. Kopyala efektinin taşı efektine göre önceliği, taşı efektinin de link ver

efektine göre önceliği vardır. Kullanıcı klavyeyi kullanarak varsayılan önceliği değiştirebilir.

Page 206: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

199ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Document.designMode özelliği

Belgedeki tüm öğelerin düzenlenebilir olması için document.designMode özelliğini on olan bir değere ayarlayın.

Yerleşik düzenleyici desteği metin düzenleme, kopyalama, yapıştırma ve sürükleyip bırakmayı içerir. designMode

özelliğinin on olarak ayarlanması, body öğesinin contentEditable özelliğinin true olarak ayarlanmasına eşdeğerdir.

Bir belgenin hangi bölümlerinin düzenlenebilir olacağını tanımlamak için çoğu HTML öğesinde contentEditable

özelliğini kullanabilirsiniz. Ek bilgi için bkz. “HTML contentEditable niteliği” sayfa 204.

unload olayları (body ve frameset nesneleri için)

Bir pencerenin üst düzey frameset veya body etiketinde (uygulamanın ana penceresi de dahil olmak üzere), kapanan

pencereye (veya uygulamaya) yanıt vermek için unload olayını kullanmayın. Bunun yerine NativeApplication

nesnesinin exiting olayını kullanın (uygulamanın ne zaman kapandığını saptamak için). Veya NativeWindow

nesnesinin closing olayını kullanın (pencerenin ne zaman kapandığını saptamak için). Örneğin aşağıdaki JavaScript

kodu, kullanıcı uygulamayı kapattığında ("Goodbye.") mesajını görüntüler:

var app = air.NativeApplication.nativeApplication; app.addEventListener(air.Event.EXITING, closeHandler); function closeHandler(event) { alert("Goodbye."); }

Ancak komut dosyaları, bir karenin, iframe'in veya üst düzey pencere içeriğinin gezinmesi sonucu oluşan unload

olayına başarılı bir şekilde yanıt verebilir.

Not: Adobe AIR'in gelecek sürümlerinde bu sınırlamalar kaldırılabilir.

JavaScript Window nesnesi

Window nesnesi, JavaScript çalışma bağlamında global nesne olarak kalır. AIR, uygulama sanal alanında, önemli ana

bilgisayar nesnelerinin yanı sıra yerleşik AIR sınıflarına erişim sağlamak için JavaScript Window nesnesine yeni

özellikler ekler. Ayrıca, bazı yöntemler ve özellikler, uygulama sanal alanının içinde bulunup bulunmamalarına bağlı

olarak farklı davranışlar gösterir.

Window.runtime özelliği runtime özelliği, yerleşik runtime sınıflarını uygulama sanal alanının içinden başlatmanızı

ve kullanmanızı sağlar. Bu sınıflar AIR ve Flash Player API'lerini içerir (ancak örneğin Flex çerçevesini içermez).

Örneğin aşağıdaki ifade bir AIR file nesnesi oluşturur:

var preferencesFile = new window.runtime.flash.filesystem.File();

AIR SDK'de sağlanan AIRAliases.js dosyası, bu gibi başvuruları kısaltmanızı sağlayan başka ad tanımları içerir.

Örneğin AIRAliases.js bir sayfaya içe aktarıldığında, aşağıdaki ifade kullanılarak bir File nesnesi oluşturulabilir:

var preferencesFile = new air.File();

window.runtime özelliği, yalnızca uygulama sanal alanındaki içerik ve kareler veya iframe'ler içeren bir sayfanın üst

belgesi için tanımlanır.

Bkz. “AIRAliases.js dosyasını kullanma” sayfa 212.

Window.nativeWindow özelliği nativeWindow özelliği, alttaki yerel window nesnesine bir başvuru sağlar. Bu özellik

sayesinde ekran konumu, boyutu ve görünürlüğü gibi window işlevlerini ve özelliklerini komut dosyasına yazabilir ve

kapatma, yeniden boyutlandırma ve taşıma gibi window olaylarını işleyebilirsiniz. Örneğin aşağıdaki ifade pencereyi

kapatır:

window.nativeWindow.close();

Page 207: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

200ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Not: NativeWindow nesnesi tarafından sağlanan pencere kontrol özellikleri, JavaScript Window nesnesi tarafından

sağlanan özelliklerle örtüşür. Bu gibi durumlarda en uygun bulduğunuz yöntemi kullanabilirsiniz.

window.nativeWindow özelliği, yalnızca uygulama sanal alanındaki içerik ve kareler veya iframe'ler içeren bir

sayfanın üst belgesi için tanımlanır.

Window.htmlLoader özelliği htmlLoader özelliği, HTML içeriğine sahip olan AIR HTMLLoader nesnesine bir

başvuru sağlar. Bu özellik sayesinde, HTML ortamının görünümünü ve davranışını komut dosyasına yazabilirsiniz.

Örneğin kontrolün varsayılan, beyaz bir arka plan boyayıp boyamadığını belirlemek için

htmlLoader.paintsDefaultBackground özelliğini kullanabilirsiniz:

window.htmlLoader.paintsDefaultBackground = false;

Not: HTMLLoader nesnesi window özelliğine sahiptir, bu özellik, sahip olduğu HTML içeriğinin JavaScript Window

nesnesine başvurur. Bu özelliği, içeriğe sahip olan HTMLLoader nesnesine bir başvuru yoluyla JavaScript ortamına

erişmek için kullanabilirsiniz.

window.htmlLoader özelliği, yalnızca uygulama sanal alanındaki içerik ve kareler veya iframe'ler içeren bir sayfanın

üst belgesi için tanımlanır.

Window.parentSandboxBridge ve Window.childSandboxBridge özellikleri parentSandboxBridge ve

childSandboxBridge özellikleri sayesinde, üst ve alt kareler arasında bir arabirim tanımlayabilirsiniz. Daha fazla bilgi

için bkz. “Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 220.

Window.setTimeout() ve Window.setInterval() işlevleri AIR, setTimeout() ve setInterval() işlevlerinin uygulama

sanal alanında kullanılmasına yönelik güvenlik kısıtlamaları getirir. setTimeout() veya setInterval() işlevlerini

çağırırken bir dize olarak çalıştırılacak kodu tanımlayamazsınız. Bir işlev başvurusu kullanmanız gerekir. Daha fazla

bilgi için bkz. “setTimeout() ve setInterval()” sayfa 209.

Window.open() işlevi open() yöntemi uygulama dışı bir sanal alanda çalışan bir kod tarafından çağrıldığında,

yalnızca kullanıcı etkileşiminin (fare tıklatma veya tuşbasma gibi) bir sonucu olarak çağrılırsa bir pencere açar. Ayrıca,

uygulama başlığı pencere başlığına önek olarak getirilir (pencerelerin uzak içerik tarafından açılmasını engellemek için

). Daha fazla bilgi için bkz.“JavaScript window.open() yönteminin çağrılmasına ilişkin kısıtlamalar” sayfa 33.

air.NativeApplication nesnesi

NativeApplication nesnesi uygulama durumu hakkında bilgi sağlar, uygulama düzeyi birçok önemli olayı gönderir ve

uygulama davranışının kontrol edilmesine yönelik faydalı işlevler sağlar. NativeApplication nesnesinin tek bir örneği

otomatik olarak oluşturulur ve bu özelliğe sınıf tanımlı NativeApplication.nativeApplication özelliği

yardımıyla erişilebilir.

Nesneye JavaScript kodundan erişmek için şunu kullanabilirsiniz:

var app = window.runtime.flash.desktop.NativeApplication.nativeApplication;

Veya AIRAliases.js komut dosyası içe aktarılmışsa, daha kısa biçimini kullanabilirsiniz:

var app = air.NativeApplication.nativeApplication;

NativeApplication nesnesine yalnızca uygulama sanal alanından erişilebilir. İşletim sistemiyle etkileşim“Çalışma

zamanı ve işletim sistemi bilgileriyle çalışma” sayfa 265, NativeApplication nesnesini ayrıntılı olarak anlatmaktadır.

JavaScript URL şeması

Bir JavaScript URL şemasında tanımlanan kodu çalıştırma, (href="javascript:alert('Test')" gibi) uygulama

sanal alanının içinde engellenmiştir. Hata verilmez.

Page 208: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

201ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

HTML Uzantıları

AIR ve WebKit, aşağıdakiler de dahil olmak üzere, standart olmayan birkaç HTML öğesi ve niteliği tanımlar:

“HTML kare ve iframe öğeleri” sayfa 201

“HTML Tuval öğesi” sayfa 203

“HTML öğesi olay işleyicileri” sayfa 203

HTML kare ve iframe öğeleri

AIR, uygulama sanal alanındaki içeriğin kare ve iframe öğelerine yeni nitelikler ekler:

sandboxRoot niteliği sandboxRoot niteliği, kare src niteliği tarafından belirtilen dosya için alternatif, uygulama dışı

bir kaynak etki alanı belirtir. Dosya, belirtilen etki alanına karşılık gelen uygulama dışı sanal alana yüklenir. Dosyadaki

içerik ve belirtilen etki alanından yüklenen içerik, birbirlerinin çapraz dosyasını oluşturabilir.

Önemli: sandboxRoot değerini etki alanının temel URL'sine ayarlarsanız, bu etki alanından gelen tüm içeriğe yönelik

istekler uzak sunucu yerine uygulama dizininden yüklenir (isteğin sayfa gezinmesinden mi, XMLHttpRequest öğesinden

mi, yoksa başka içerik yükleme yollarından mı kaynaklandığına bakılmaksızın).

documentRoot niteliği documentRoot niteliği, sandboxRoot tarafından belirtilen konumdaki dosyalara çözülen

URL'lerin yükleneceği yerel dizini belirtir.

URL'leri çözerken, kare src niteliğinde veya kareye yüklenen içerikte, URL'nin sandboxRoot öğesinde belirtilen

değerle eşleşen bölümü documentRoot öğesinde belirtilen değerle değiştirilir. Bu nedenle aşağıdaki kare etiketinde:

<iframe src="http://www.example.com/air/child.html" documentRoot="app:/sandbox/" sandboxRoot="http://www.example.com/air/"/>

child.html, uygulama yükleme klasörünün sandbox altdizininden yüklenir. child.html içerisindeki göreceli

URL'ler, sandbox dizini temel alınarak çözülür. AIR, dosyaları app:/sandbox/ dizininden yükleme girişiminde

bulunacağı için, www.example.com/air adresinde bulunan uzak sunucudaki tüm dosyalara kareden erişilemediğini

unutmayın.

allowCrossDomainXHR niteliği Karedeki içeriğin herhangi bir uzak etki alanına XMLHttpRequest'leri yapmasını

sağlamak için, allowCrossDomainXHR="allowCrossDomainXHR" öğesini açılış kare etiketine dahil edin. Varsayılan

olarak uygulama dışı içerik, yalnızca kendi kaynak etki alanından bu tür isteklerde bulunabilir. Bunlar etki alanları

arası XHR'lere izin vermekten doğan ciddi güvenlik sonuçlarıdır. Sayfadaki kod, herhangi bir etki alanıyla veri

alışverişi yapabilir. Kötü amaçlı içerik bir şekilde sayfaya dahil olursa, geçerli sanal alanda kodun erişimi olan tüm

veriler tehlikeye girebilir. Etki alanları arası XHR'leri yalnızca oluşturduğunuz ve kontrol ettiğiniz sayfalarda ve

yalnızca etki alanları arası veri yükleme gerçekten gerekli olduğunda etkinleştirin. Ayrıca, kod dahil etmeyi veya başka

yollarla yapılan saldırıları önlemek için, sayfa tarafından yüklenen tüm harici verileri dikkatli bir şekilde doğrulayın.

Önemli: allowCrossDomainXHR niteliği bir kare veya iframe öğesine dahil edilmişse, etki alanları arası XHR'ler

etkindir (atanan değer "0" olmadığı veya "f" ya da "n" harfleriyle başlamadığı sürece). Örneğin, allowCrossDomainXHR

değerini "deny" olarak ayarlamak da etki alanları arası XHR'leri etkinleştirir. Etki alanları arası istekleri etkinleştirmek

istemiyorsanız, niteliği tamamen öğe bildiriminin dışında bırakın.

ondominitialize niteliği Bir karenin dominitialize olayının olay işleyicisini belirtir. Bu olay, karenin pencere ve

belge nesneleri oluşturulduğunda ancak herhangi bir komut dosyası ayrıştırılmadan veya belge öğeleri

oluşturulmadan önce çalışan, AIR'e özgü bir olaydır.

Kare, dominitialize olayını yükleme dizisinde, alt sayfadaki komut dosyaları alt belgeye dominitialize işleyicisi

tarafından eklenen nesnelere, değişkenlere ve işlevlere başvurmadan önce, yeterince erken bir zamanda gönderir. Bir

alt belgeye doğrudan nesne eklemek veya alt belgedeki nesnelere doğrudan erişmek için üst sayfayla alt sayfa aynı sanal

Page 209: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

202ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

alanda bulunmalıdır. Ancak uygulama sanal alanındaki bir üst öğe, uygulama dışı sanal alandaki içerikle iletişim

kurmak için sanal alan köprüsü kurabilir.

Aşağıdaki örnekler iframe etiketinin AIR'deki kullanımını gösterir:

child.html öğesini, uzak sunucudaki gerçek bir etki alanına eşlemeden uzak sanal alana yerleştirin:

<iframe src="http://localhost/air/child.html" documentRoot="app:/sandbox/" sandboxRoot="http://localhost/air/"/>

child.html öğesini, XMLHttpRequest'lerinin yalnızca www.example.com adresine yapılmasına izin vererek uzak

sanal alana yerleştirin:

<iframe src="http://www.example.com/air/child.html" documentRoot="app:/sandbox/" sandboxRoot="http://www.example.com/air/"/>

child.html öğesini, XMLHttpRequest'lerinin herhangi bir uzak etki alanına yapılmasına izin vererek uzak sanal

alana yerleştirin:

<iframe src="http://www.example.com/air/child.html" documentRoot="app:/sandbox/" sandboxRoot="http://www.example.com/air/" allowCrossDomainXHR="allowCrossDomainXHR"/>

child.html öğesini dosya sistemiyle yerel sanal alana yerleştirin:

<iframe src="file:///templates/child.html" documentRoot="app:/sandbox/" sandboxRoot="app-storage:/templates/"/>

child.html öğesini, sanal alan köprüsü kurmak için dominitialize olayını kullanarak uzak sanal alana yerleştirin:

<html> <head> <script> var bridgeInterface = {}; bridgeInterface.testProperty = "Bridge engaged"; function engageBridge(){ document.getElementById("sandbox").parentSandboxBridge = bridgeInterface; } </script> </head> <body> <iframe id="sandbox" src="http://www.example.com/air/child.html" documentRoot="app:/" sandboxRoot="http://www.example.com/air/" ondominitialize="engageBridge()"/> </body> </html>

Aşağıdaki child.html belgesi, alt içeriğin üst sanal alan köprüsüne nasıl erişebildiğini gösterir:

Page 210: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

203ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

<html> <head> <script> document.write(window.parentSandboxBridge.testProperty); </script> </head> <body></body> </html>

Daha fazla bilgi için bkz. “Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği” sayfa 220 ve “HTML

güvenliği” sayfa 29.

HTML Tuval öğesi

Webkit Canvas API'siyle kullanmak için bir çizim alanı tanımlar. Grafik komutları etiketin kendisinde belirtilemez.

Tuvalde çizim yapmak için, JavaScript yardımıyla tuvale çizme yöntemlerini çağırın.

<canvas id="drawingAtrium" style="width:300px; height:300px;"></canvas>

Daha fazla bilgi için bkz. “Canvas nesnesi” sayfa 196.

HTML öğesi olay işleyicileri

AIR ve Webkit'teki DOM nesneleri, standart DOM olayı modelinde bulunmayan bazı olayları gönderir. Aşağıdaki

tablo, bu olaylara işleyici belirtmek için kullanabileceğiniz ilgili olay niteliklerini listeler.

Callback nitelik adı Açıklama

oncontextmenu Seçili metinde sağ tıklatılarak veya komut tuşuna basıp tıklatılarak bir bağlam menüsü

çağrıldığında çağrılır.

oncopy Bir öğedeki seçim kopyalandığında çağrılır.

oncut Bir öğedeki seçim kesildiğinde çağrılır.

ondominitialize Bir kareye veya iframe'e yüklenen belgenin DOM'si oluşturulduğunda, ancak bir DOM öğesi

oluşturulmadan veya komut dosyaları ayrıştırılmadan çağrılır.

ondrag Bir öğe sürüklendiğinde çağrılır.

ondragend Sürükleme işlemi bırakıldığında çağrılır.

ondragenter Sürükleme hareketi bir öğenin sınırlarına girdiğinde çağrılır.

ondragleave Sürükleme hareketi bir öğenin sınırlarından çıktığında çağrılır.

ondragover Sürükleme hareketi bir öğenin sınırları içerisindeyken sürekli çağrılır.

ondragstart Sürükleme hareketi başladığında çağrılır.

ondrop Bir öğenin üzerindeyken sürükleme hareketi bırakıldığında çağrılır.

onerror Bir öğe yüklenirken hata oluştuğunda çağrılır.

oninput Bir öğe biçimine metin girildiğinde çağrılır.

onpaste Öğe, bir öğeye yapıştırıldığında çağrılır.

onscroll Kaydırılabilir öğenin içeriği kaydırıldığında çağrılır.

onsearch Bir öğe kopyalandığında çağrılır (? Apple belgeleri doğru mu?)

onselectstart Bir seçim başladığında çağrılır.

Page 211: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

204ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

HTML contentEditable niteliği

Kullanıcıların öğenin içeriğini düzenlemelerine olanak sağlamak için, contentEditable niteliğini herhangi bir

HTML öğesine ekleyebilirsiniz. Örneğin aşağıdaki örnek HTML kodu, ilk p öğe dışında belgenin tamamını

düzenlenebilir olarak ayarlar:

<html> <head/> <body contentEditable="true"> <h1>de Finibus Bonorum et Malorum</h1> <p contentEditable="false">Sed ut perspiciatis unde omnis iste natus error.</p> <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis.</p> </body> </html>

Not: document.designMode özelliğini on olarak ayarlarsanız, tek bir öğe için contentEditable ayarına

bakılmaksızın belgedeki tüm öğeler düzenlenebilir hale gelir. Ancak designMode özelliğini off olarak ayarlamak,

contentEditable değerinin true olduğu öğelerin düzenlenme özelliğini devre dışı bırakmaz. Ek bilgi için bkz.

“Document.designMode özelliği” sayfa 199.

CSS Uzantıları

WebKit birçok genişletilmiş CSS özelliğini destekler. Aşağıdaki tablo, destek sağlanan genişletilmiş özellikleri listeler.

Ek, standart olmayan özellikler WebKit'te mevcuttur, ancak AIR'de tamamen desteklenmez; bunun nedeni hala

WebKit'te geliştirilmekte olmaları veya gelecekte kaldırılabilecek deneysel özellikler olmalarıdır.

CSS özellik adı Değerler Açıklama

-webkit-border-horizontal-spacing Negatif olmayan uzunluk birimi Kenarlık boşluğunun yatay bileşenini belirtir.

-webkit-border-vertical-spacing Negatif olmayan uzunluk birimi Kenarlık boşluğunun dikey bileşenini belirtir.

-webkit-line-break after-white-space, normal Çince, Japonca ve Korece (CJK) metinler için

kullanılacak satır kesmesi kuralını belirtir.

-webkit-margin-bottom-collapse collapse, discard, separate Bir tablo hücresinin alt kenar boşluğunun

nasıl daraltıldığını tanımlar.

-webkit-margin-collapse collapse, discard, separate Bir tablo hücresinin üst ve alt kenar

boşluğunun nasıl daraltıldığını tanımlar.

-webkit-margin-start Bir uzunluk birimi. Başlangıç kenar boşluğunun genişliği. Bu

özellik soldan sağa metinlerde sol kenar

boşluğunu geçersiz kılar. Bu özellik sağdan

sola metinlerde sağ kenar boşluğunu geçersiz

kılar.

-webkit-margin-top-collapse collapse, discard, separate Bir tablo hücresinin üst kenar boşluğunun

nasıl daraltıldığını tanımlar.

-webkit-nbsp-mode normal, space İçerikte bulunan kesmeyen boşlukların

davranışını tanımlar.

-webkit-padding-start Bir uzunluk birimi Başlangıç dolgusunun genişliğini belirtir. Bu

özellik soldan sağa metinlerde sol dolgu

değerini geçersiz kılar. Bu özellik sağdan sola

metinlerde sağ dolgu değerini geçersiz kılar.

-webkit-rtl-ordering logical, visual Soldan sağa ve sağdan sola karışık metnin

varsayılan işlemesini geçersiz kılar.

-webkit-text-fill-color Adlı bir renk veya sayısal renk değeri. Metin dolgu rengini belirtir.

Page 212: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

205ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ortamı hakkında

Daha fazla bilgi için bkz. Apple Safari CSS Başvurusu

(http://developer.apple.com/documentation/AppleApplications/Reference/SafariCSSRef/).

-webkit-text-security circle, disc, none, square Şifre girişi alanında kullanılacak değiştirme

şeklini belirtir.

-webkit-user-drag • auto — Varsayılan davranış

• element — Öğenin tamamı sürüklenir

• none — Öğe sürüklenemez

Otomatik sürükleme davranışını geçersiz kılar.

-webkit-user-modify read-only, read-write, read-write-plaintext-

only

Bir öğenin içeriğinin düzenlenip

düzenlenemeyeceğini belirtir.

-webkit-user-select • auto — Varsayılan davranış

• none — Öğe seçilemez

• text — Yalnızca öğedeki metin seçilebilir

Bir kullanıcının öğenin içeriğini seçip

seçemeyeceğini belirtir.

CSS özellik adı Değerler Açıklama

Page 213: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

206

Bölüm 21: HTML ve JavaScript'te programlama

Adobe® AIR™ uygulamalarını HTML ve JavaScript ile geliştirmeye özgü bir dizi programlama başlığı mevcuttur.

HTML tabanlı bir AIR uygulaması veya HTMLLoader sınıfını (veya mx:HTML Flex™ bileşenini) kullanarak HTML

veya JavaScript çalıştıran SWF tabanlı bir AIR uygulamasını programladığınızda, aşağıdaki bilgiler önemlidir.

HTMLLoader sınıfı hakkında

Adobe AIR HTMLLoader sınıfı, AIR uygulamasında HTML içeriğini görüntüleyebilen display nesnesini tanımlar.

SWF tabanlı uygulamalar, var olan bir pencereye HTMLLoader denetimi ekleyebilir veya

HTMLLoader.createRootWindow() öğesine sahip HTMLLoader nesnesini otomatik olarak içeren bir HTML

penceresi oluşturabilir. HTMLLoader nesnesine yüklenen HTML sayfasından JavaScript window.htmlLoader özelliği

aracılığıyla erişilebilir.

URL'den HTML içeriği yükleme

Aşağıdaki kod, bir HTMLLoader nesnesine URL yükler ve nesneyi Sprite nesnesinin alt nesnesi olarak ayarlar:

var container:Sprite; var html:HTMLLoader = new HTMLLoader; html.width = 400; html.height = 600; var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); html.load(urlReq); container.addChild(html);

HTMLLoader nesnesinin width ve height özellikleri varsayılan olarak 0'a ayarlanmıştır. Sahneye HTMLLoader

nesnesi eklerken bu boyutları ayarlamak isteyeceksiniz. HTMLLoader öğesi, sayfa yüklenirken birçok olay gönderir.

Yüklenen sayfayla etkileşim kurmanın ne zaman güvenli olduğunu belirlemek için bu olauları kullanabilirsiniz. Bu

olaylar, “HTML ile ilgili olayları işleme” sayfa 224 bölümünde anlatılmıştır.

Ayrıca TextField sınıfını kullanarak HTML metni oluşturabilirsiniz, ancak bunun özellikleri sınırlıdır. Adobe® Flash®

Player’ın TextField sınıfı, HTML işaretleme alt kümesini destekler, ancak boyut sınırlamaları nedeniyle özellikleri

sınırlıdır. (Adobe AIR'de bulunan HTMLLoader sınıfı Flash Player'da mevcut değildir.)

Bir dizeden HTML içeriğini yükleme

HTMLLoader nesnesinin loadString() yöntemi, HTML içeriğinin bir dizesini HTMLLoader nesnesine yükler:

var html:HTMLLoader = new HTMLLoader(); var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; html.loadString(htmlStr);

loadString() yöntemiyle yüklenen içeriğe AIR API'lerine tam erişim verilir ve bu içerik uygulama güvenlik sanal

alanına yerleştirilir.

Page 214: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

207ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

HTML ve AIR uygulamalarının kullanımında önemli güvenlik kuralları

AIR uygulamasıyla kurduğunuz dosyalar AIR API'lerine erişime sahiptir. Güvenlik nedenleriyle, diğer kaynaklardan

gelen içerik bu erişime sahip değildir. Örneğin bu kısıtlama uzak bir etki alanından (http://ornek.com gibi) gelen

içeriğin kullanıcının masaüstü dizini içeriğini okumasını (veya daha kötüsünü) engeller.

Çünkü eval() işlevinin (ve ilgili API'lerin) çağrılması yoluyla yararlanılabilecek güvenlik boşlukları mevcuttur,

uygulamayla yüklenen içerik, varsayılan olarak bu yöntemleri kullanamaz. Ancak, bazı Ajax çerçeveleri eval()

işlevini ve ilgili API'leri çağırma yolunu kullanır.

İçeriği bir AIR uygulamasında çalışmak üzere düzgün biçimde yapılandırmak için farklı kaynaklardan gelen içerikteki

güvenlik kısıtlamalarına ilişkin kuralları dikkate almalısınız. Farklı kaynaklardan gelen içerik, sanal alan adı verilen

ayrı güvenlik sınıflandırmalarına yerleştirilir (bkz. “Sanal alanlar” sayfa 26). Varsayılan olarak, uygulamayla yüklenen

içerik uygulama sanal alanı olarak bilinen bir sanal alana yüklenir ve bu sayede AIR API'lerine erişebilir. Uygulama

sanal alanı güvenilmeyen kodların yürütülmesini engellemek üzere tasarlanmış kısıtlamalar içerdiğinden, genellikle en

güvenli sanal alandır.

Çalışma zamanı, uygulamanızla yüklenen içeriği uygulama sanal alanından farklı bir sanal alana yüklemenize olanak

verir. Uygulama dışı sanal alanlardaki içerik, tipik web tarayıcılarınınkine benzer bir güvenlik ortamında çalışır.

Örneğin, uygulama dışı sanal alanlardaki kod eval() yöntemini ve ilgili yöntemleri kullanabilir (ancak aynı zamanda

AIR API'lerine erişme izni yoktur). Çalışma zamanı, içeriğin farklı sanal alanlarda güvenli biçimde iletişim kurmasına

yönelik yollar içerir (örneğin, AIR API'lerini uygulama dışı içeriğe göstermeden) Ayrıntılar için bkz. “Farklı güvenlik

sanal alanlarında çapraz komut dosyası içeriği” sayfa 220.

Güvenlik nedenleriyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir JavaScript

hatası gönderir: “Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı güvenlik

ihlali.”

Bu hatayı önlemek için sonraki “Güvenlik ilişkili JavaScript hatalarını önleme” sayfa 207 bölümünde anlatılan

kodlama uygulamalarını takip edin.

Daha fazla bilgi için bkz. “HTML güvenliği” sayfa 29.

Güvenlik ilişkili JavaScript hatalarını önleme

Bu güvenlik kısıtlamaları nedeniyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir

JavaScript hatası gönderir: “Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı

güvenlik ihlali.” Bu hatayı önlemek için, bu kodlama uygulamalarını takip edin.

Güvenlik ilişkili JavaScript hatalarının nedenleri

Belge load olayı tetiklendiğinde ve herhangi bir load olay işleyicisinden çıkıldığında, uygulama sanal alanında

yürütülen kod, değerlendirme ve yürütme dizeleri içeren çoğu uygulamadan kısıtlanır. Güvenli olmayabilecek dizeleri

değerlendiren ve yürüten aşağıdaki JavaScript ifade türlerinin kullanılmaya çalışılması JavaScript hataları oluşturur:

• eval() işlevi

• setTimeout() ve setInterval()

• İşlev yapıcısı

Ayrıca, aşağıdaki JavaScript ifade türleri güvenli olmayan JavaScript hatası oluşturmadan başarısız olur:

• javascript: URL'ler

Page 215: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

208ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

• innerHTML ve outerHTML ifadelerinde onevent nitelikleri aracılığıyla atanan olay geri çağrıları

• JavaScript dosyalarını uygulama yükleme dizini dışından yükleme

• document.write() ve document.writeln()

• load olayından önce veya load olay işleyicisi sırasında senkronize XMLHttpRequests

• Dinamik olarak oluşturulan komut dosyası öğeleri

Not: Bazı sınırlı durumlarda, dizelerin değerlendirilmesine izin verilir. Daha fazla bilgi için bkz. “Farklı sanal

alanlardaki içerik için kod kısıtlamaları” sayfa 31.

Adobe http://www.adobe.com/go/airappsandboxframeworks_tr adreslerinde uygulama güvenlik sanal alanını

desteklemek üzere bilinen bir dizi Ajax çerçevesi tutar.

Aşağıdaki bölümler, güvenli olmayan JavaScript hatalarını ve uygulama sanal alanında çalışan koda ilişkin sessiz

hataları önlemek için komut dosyalarının nasıl yeniden yazılacağını anlatır.

Uygulama içeriğini farklı bir sanal alana eşleme

Çoğu durumda, güvenlik ilişkili JavaScript hatalarını önlemek amacıyla bir uygulamayı yeniden yazabilir veya yeniden

yapılandırabilirsiniz. Ancak, yeniden yazma veya yeniden yapılandırma olanaklı olmadığında uygulama içeriğini

“Uygulama içeriğini uygulama dışı sanal alana yükleme” sayfa 220 bölümünde anlatılan tekniği kullanarak farklı bir

sanal alana yükleyebilirsiniz. Bu içeriğin AIR API'lerine de erişmesi gerekiyorsa, “Sanal alan köprü arabirimini kurma”

sayfa 221 bölümünde anlatıldığı biçimde bir sanal alan köprüsü oluşturabilirsiniz.

eval() işlevi

Uygulama sanal alanında, eval() işlevi yalnızca load olayı sayfasından önce veya load olay işleyicisi sırasında

kullanılabilir. Sayfa yüklendikten sonra, eval() işlevine yapılan çağrılar kodu yürütmez. Ancak, aşağıdaki

durumlarda eval() işlevinin kullanımını önlemek için kodunuzu yeniden yazabilirsiniz.

Nesneye özellikler atama

Özellik erişimcisi oluşturmak için dizeyi ayrıştırmak yerine:

eval("obj." + propName + " = " + val);

köşeli parantez açıklaması içeren access özellikleri:

obj[propName] = val;

Bağlamda var olan değişkenler içeren işlev oluşturma

İfadeleri aşağıdaki şekilde değiştirin:

function compile(var1, var2){ eval("var fn = function(){ this."+var1+"(var2) }"); return fn; }

şununla:

function compile(var1, var2){ var self = this; return function(){ self[var1](var2) }; }

Page 216: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

209ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

Sınıf adını dize parametresi olarak kullanarak nesne oluşturma

Aşağıdaki kodla tanımlanan varsayımsal bir JavaScript sınıfı düşünün:

var CustomClass = { Utils: { Parser: function(){ alert('constructor') } }, Data: { } }; var constructorClassName = "CustomClass.Utils.Parser";

Örnek oluşturmanın en basit yolu eval() işlevini kullanmaktır:

var myObj; eval('myObj=new ' + constructorClassName +'()')

Ancak, sınıf adının her bileşenini ayrıştırma ve köşeli parantez açıklaması kullanarak yeni nesne oluşturma yoluyla,

eval() işlevinin çağrılmasını önleyebilirsiniz:

function getter(str) { var obj = window; var names = str.split('.'); for(var i=0;i<names.length;i++){ if(typeof obj[names[i]]=='undefined'){ var undefstring = names[0]; for(var j=1;j<=i;j++) undefstring+="."+names[j]; throw new Error(undefstring+" is undefined"); } obj = obj[names[i]]; } return obj; }

Örneği oluşturmak için şunu kullanın:

try{ var Parser = getter(constructorClassName); var a = new Parser(); }catch(e){ alert(e); }

setTimeout() ve setInterval()

İşleyici işlevi olarak onaylanan dizeyi bir işlev başvurusu veya nesneyle değiştirin. Örneğin, ifadeyi şu şekilde

değiştirin:

setTimeout("alert('Timeout')", 10);

şununla:

setTimeout(alert('Timeout'), 10);

Page 217: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

210ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

Veya işlev bu nesnenin çağıran tarafından ayarlanmasını gerektirdiğinde ifadeyi şu şekilde değiştirin:

this.appTimer = setInterval("obj.customFunction();", 100);

şununla:

var _self = this; this.appTimer = setInterval(function(){obj.customFunction.apply(_self);}, 100);

İşlev yapıcısı

new Function(param, body) çağrıları bir satır içi işlev bildirimiyle değiştirilebilir veya yalnızca sayfa load olayı

işlenmeden önce kullanılabilir.

javascript: URL'ler

javascript kullanılarak linkte tanımlanan kod: Uygulama sanal alanında URL şeması yoksayılır. Güvenli olmayan

JavaScript hatası oluşmadı. javascript aracılığıyla linkleri değiştirebilirsiniz: URL'ler, örneğin:

<a href="javascript:code()">Click Me</a>

şununla:

<a href="#" onclick="code()">Click Me</a>

innerHTML ve outerHTML ifadelerinde onevent nitelikleri aracılığıyla atanan

olay geri çağrıları

Belge DOM'una öğe eklemek için innerHTML veya outerHTML kullandığınızda, ifadede atanan onclick veya

onmouseover gibi olay geri çağrıları yoksayılır. Güvenlik hatası oluşmadı. Bunun yerine, addEventListener()

yöntemini kullanarak yeni öğelere id niteliği atayabilir ve olay işleyici geri çağrı işlevlerini ayarlayabilirsiniz.

Örneğin, belgede şu şekilde bir hedef öğe belirlendiğinde:

<div id="container"></div>

İfadeleri şu şekilde değiştirin:

document.getElementById('container').innerHTML = '<a href="#" onclick="code()">Click Me.</a>';

şununla:

document.getElementById('container').innerHTML = '<a href="#" id="smith">Click Me.</a>'; document.getElementById('smith').addEventListener("click", function() { code(); });

JavaScript dosyalarını uygulama yükleme dizini dışından yükleme

Uygulama sanal alanının dışından komut dosyaları yüklemeye izin verilmez. Güvenlik hatası oluşmadı. Uygulama

sanal alanında çalışan tüm komut dosyaları uygulama dizinine yüklenmiş olmalıdır. Sayfada harici komut dosyaları

kullanmak için, sayfayı farklı bir sanal alana eşlemelisiniz. Bkz. “Uygulama içeriğini uygulama dışı sanal alana

yükleme” sayfa 220.

Page 218: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

211ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

document.write() ve document.writeln()

Sayfa load olayı işlendikten sonra document.write() veya document.writeln() çağrıları yoksayılır. Güvenlik

hatası oluşmadı. Alternatif olarak yeni bir dosya yükleyebilir veya DOM işleme tekniklerini kullanarak belge gövdesini

değiştirebilirsiniz.

load olayından önce veya load olay işleyicisi sırasında senkronize

XMLHttpRequests

load olayından önce veya load olay işleyicisi sırasında başlatılan senkronize XMLHttpRequest'ler herhangi bir içerik

döndürmez. Senkronize olmayan XMLHttpRequest'ler başlatılabilir, ancak load olayının sonrasına kadar dönmez.

load olayı işlendikten sonra senkronize XMLHttpRequest'ler normal davranır.

Dinamik olarak oluşturulan komut dosyası öğeleri

Dinamik olarak oluşturulan komut dosyası öğeleri, örneğin innerHTML ile veyadocument.createElement()

yöntemiyle oluşturulduklarında yoksayılır.

AIR API sınıflarına JavaScript'ten erişme

Standart ve gelişmiş Webkit öğelerine ek olarak, HTML ve JavaScript kodu da çalışma zamanı tarafından sağlanan host

sınıflarına erişebilir. Bu sınıflar AIR'in sağladığı gelişmiş özelliklere erişmenizi sağlar, bu özellikler:

• Dosya sistemine erişim

• Yerel SQL veri tabanları kullanımı

• Uygulama ve pencere menülerinin denetimi

• Ağ iletişimi için soketlere erişim

• Kullanıcı tanımlı sınıfların ve nesnelerin kullanımı

• Ses özellikleri

Örneğin, AIR dosya API'si flash.filesystem paketinde bulunan bir File sınıfını içerir. JavaScript'te aşağıdaki şekilde

bir File nesnesi oluşturabilirsiniz:

var myFile = new window.runtime.flash.filesystem.File();

runtime nesnesi, uygulama sanal alanındaki AIR'de çalışan HTML içeriği tarafından kullanılabilen özel bir

JavaScript nesnesidir. JavaScript'ten runtime sınıflarına erişebilmenizi sağlar. runtime nesnesinin flash özelliği,

flash paketine erişim sağlar. Buna karşılık, runtime nesnesinin flash.filesystem özelliği flash.filesystem

paketine erişim sağlar (ve bu paket File sınıfını içerir). Paketler, ActionScript'te kullanılan sınıfları düzenlemenin

bir yoludur.

Not: runtime özelliği kareye veya iframe'e yüklenen sayfaların window nesnelerine otomatik olarak eklenmez.

Ancak, alt belge uygulama sanal alanında olduğu sürece, alt öğe üst öğenin runtime özelliğine erişebilir.

Runtime sınıflarının paket yapısı geliştiricilerin her sınıfa erişmek için uzun JavaScript kod dizelerini yazmasını

gerektirdiğinden (window.runtime.flash.desktop.NativeApplication içinde olduğu gibi), AIR SDK

runtime sınıflarına çok daha kolay erişmenizi sağlayan AIRAliases.js dosyasını içerir (örneğin yalnızca

air.NativeApplication yazarak).

Page 219: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

212ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

Bu kılavuzda AIR API sınıfları tartışılmıştır. HTML geliştiricilerini ilgilendirebilecek Flash Player API dışındaki

sınıflar HTML Geliştiricileri için Adobe AIR Dil Başvurusu bölümünde anlatılmıştır. ActionScript, SWF (Flash

Player) içeriğinde kullanılan dildir. Ancak, JavaScript ve ActionScript sözdizimleri birbirine benzer. (ECMAScript

dilinin sürümlerini temel alır.) Tüm yerleşik sınıflar hem JavaScript'te (HTML içeriğinde) hem de ActionScript'te

(SWF içeriğinde) mevcuttur.

Not: JavaScript kodu ActionScript'te bulunan Dictionary, XML, and XMLList sınıflarını kullanamaz.

Not: Daha fazla bilgi için bkz. ActionScript 3.0 sınıfları, paketleri ve ad alanları ve JavaScript geliştiricileri için

ActionScript temelleri.

AIRAliases.js dosyasını kullanma

Runtime sınıfları, paket yapısında aşağıdaki şekilde düzenlenmiştir:

• window.runtime.flash.desktop.NativeApplication

• window.runtime.flash.desktop.ClipboardManager

• window.runtime.flash.filesystem.FileStream

• window.runtime.flash.data.SQLDatabase

AIR SDK içinde, runtime sınıflarına daha az yazı yazarak erişebilmenizi sağlayacak “başka ad” tanımlarını sunan

bir AIRAliases.js dosyası yer alır. Örneğin, yukarıda listelenen sınıflara yalnızca şunu yazarak erişebilirsiniz:

• air.NativeApplication

• air.Clipboard

• air.FileStream

• air.SQLDatabase

Bu liste, AIRAliases.js dosyasındaki sınıfların kısa bir alt kümesidir. Sınıfların ve paket düzeyindeki işlevlerin tam

listesi HTML Geliştiricileri için Adobe AIR Dil Başvurusu içinde bulunur.

AIRAliases.js dosyası, yaygın olarak kullanılan runtime sınıflarının yanı sıra, yaygın olarak kullanılan paket

düzeyindeki işlevlere işlevler için başka adları da içerir: air.trace(), air.navigateToURL() ve

air.sendToURL() olarak farklı adlandırılan window.runtime.trace(),

window.runtime.flash.net.navigateToURL() ve window.runtime.flash.net.sendToURL().

AIRAliases.js dosyasını kullanmak için aşağıdaki komut dosyası başvurusunu HTML sayfanıza ekleyin:

<script src="AIRAliases.js"></script>

Gerektiğinde src başvurusundaki yolu ayarlayın.

Önemli: Bu belgedeki JavaScript örnek kodu, aksi belirtilmediği sürece AIRAliases.js dosyasını HTML sayfanıza dahil

ettiğinizi varsayar.

AIR'deki URL'ler hakkında

AIR'den çalışan HTML içeriğinde, link etiketinin href niteliğinde veya URL girebileceğiniz herhangi bir yerde img,

frame, iframe ve script etiketlerine ilişkin src niteliklerini tanımlamak için aşağıdaki URL şemalarından birini

kullanabilirsiniz.

Page 220: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

213ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

URL şemalarının AIR'de kullanımı hakkında daha fazla bilgi için bkz. “URL'lerde AIR URL şemalarını kullanma”

sayfa 271.

File, Loader, URLStream ve Sound sınıfları dahil çoğu AIR API'leri URL içeren bir dize yerine URLRequest nesnesini

kullanır. URLRequest nesnesi, aynı url şemalarından herhangi birini kullanabilen bir dizeyle başlatılır. Örneğin,

aşağıdaki ifade Adobe ana sayfasını istemek için kullanılabilecek bir URLRequest nesnesi oluşturur.

var urlReq = new air.URLRequest("http://www.adobe.com/");

URLRequest nesneleri hakkında bilgi için bkz. “URL istekleri ve ağ iletişimi” sayfa 270.

ActionScript nesnelerini JavaScript için kullanılabilir duruma getirme

HTMLLoader nesnesi tarafından yüklenen HTML sayfasındaki JavaScript, ActionScript yürütme bağlamında HTML

sayfasının window.runtime, window.htmlLoader ve window.nativeWindow özellikleri kullanılarak tanımlanan

sınıfları, nesneleri ve işlevleri çağırabilir. Ayrıca JavaScript yürütme bağlamında ActionScript nesneleri ve işlevlerine

başvurular oluşturarak bunları JavaScript için kullanılabilir duruma getirebilirsiniz.

JavaScript nesnelerine ActionScript üzerinden erişmenin basit bir örneği

Aşağıdaki örnek, ActionScript nesnelerine başvuru yapan özelliklerin bir HTML'sayfasının global window nesnesine

nasıl eklendiğini gösterir:

var html:HTMLLoader = new HTMLLoader(); var foo:String = "Hello from container SWF." function helloFromJS(message:String):void { trace("JavaScript says:", message); } var urlReq:URLRequest = new URLRequest("test.html"); html.addEventListener(Event.COMPLETE, loaded); html.load(urlReq); function loaded(e:Event):void{ html.window.foo = foo; html.window.helloFromJS = helloFromJS; }

Önceki örnekte HTMLLoader nesnesine yüklenen HTML içeriği (test.html adlı bir dosyada) üst SWF dosyasında

tanımlanan foo özelliği ve helloFromJS() yöntemine erişebilir:

URL şeması Açıklama Örnek

dosya Dosya sisteminin köküne ilişkin yol. file:///c:/AIR Test/test.txt

app Yüklenen uygulamanın kök dizinine ilişkin yol. app:/images

app depolama Uygulama depolama dizinine ilişkin yol. AIR, yüklenen her

uygulama için bu uygulamaya ilişkin verileri depolamak üzere

kullanışlı bir yer olan benzersiz bir uygulama depolama dizini

tanımlar.

app-storage:/settings/prefs.xml

http Standart bir HTTP isteği. http://www.adobe.com

https Standart bir HTTPS isteği. https://secure.example.com

Page 221: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

214ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

<html> <script> function alertFoo() { alert(foo); } </script> <body> <button onClick="alertFoo()"> What is foo? </button> <p><button onClick="helloFromJS('Hi.')"> Call helloFromJS() function. </button></p> </body> </html>

Yüklenen bir belgenin JavaScript bağlamına erişirken, sayfa yapım sırasında nesneleri sayfada tanımlanan tüm komut

dosyalarının erişebileceği kadar erken oluşturmak için htmlDOMInitialize olayını kullanabilirsiniz. Complete

olayını beklerseniz, yalnızca sayfa load olayından sonra çalışan sayfadaki komut dosyaları eklenen nesnelere erişebilir.

Sınıf tanımlarını JavaScript için kullanılabilir duruma getirme

Uygulamanızın ActionScript sınıflarını JavaScript'te kullanılabilir duruma getirmek için, yüklenen HTML içeriğini

sınıf tanımlarını içeren uygulama etki alanına atayabilirsiniz. JavaScript yürütme bağlamının uygulama etki alanı,

HTMLLoader nesnesinin runtimeApplicationDomain özelliğiyle ayarlanabilir. Uygulama etki alanını birincil

uygulama etki alanı olarak ayarlamak için runtimeApplicationDomain öğesini aşağıdaki kodda gösterildiği şekilde

ApplicationDomain.currentDomain olarak ayarlayın:

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

runtimeApplicationDomain özelliği ayarlandığında, JavaScript bağlamı sınıf tanımlarını atanan etki alanıyla

paylaşır. JavaScript'teki özel bir sınıfın örneğini oluşturmak için window.runtime özelliği aracılığıyla sınıf tanımına

başvuru yapın ve yeni operatörü kullanın:

var customClassObject = new window.runtime.CustomClass();

HTML içeriği uyumlu bir güvenlik etki alanından geliyor olmalıdır. HTML içeriği atadığınız uygulama etki alanından

farklı bir güvenlik etki alaından geliyorsa, sayfa bunun yerine varsayılan uygulama etki alanını kullanır. Örneğin,

İnternet'ten uzak bir sayfa yüklediğinizde ApplicationDomain.currentDomain öğesini sayfanın uygulama etki alanı

olarak atayamazsınız.

Olay dinleyicilerini kaldırma

Runtime nesneleri, yüklenen SWF içeriğindeki nesneler ve hatta diğer sayfalarda çalışan JavaScript nesneleri de dahil

güncel sayfa dışındaki nesnelere JavaScript olay dinleyicileri eklediğinizde, sayfa boşaldığında her zaman bu olay

dinleyicilerini kaldırmalısınız. Aksi halde, olay dinleyicisi artık var olmayan bir işleyici işlevine olay gönderir. Bu

gerçekleşirse, şu hata mesajını görürsünüz: “Uygulama artık yüklenmeyen bir HTML sayfasındaki JavaScript

nesnesine başvuruda bulunmaya çalıştı." Gerekli olmayan olay dinleyicilerinin kaldırılması, AIR'in ilişkilendirilmiş

belleği geri istemesine olanak verir. Daha fazla bilgi için bkz. “Gezinilen HTML sayfalarındaki olay dinleyicilerini

kaldırma” sayfa 228.

Page 222: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

215ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

HTML DOM ve JavaScript nesnelerine ActionScript'ten erişme

HTMLLoader nesnesi complete olayını gönderdikten sonra, sayfaya ilişkin HTML DOM'daki (belge nesnesi modeli)

tüm nesnelere erişebilirsiniz. Erişilebilir nesneler görüntü öğelerininin (sayfadaki div ve p nesneleri gibi) yanı sıra

JavaScript değişkenleri ve işlevlerini kapsar. complete olayı, JavaScript sayfası load olayına karşılık gelir. complete

gönderilmeden önce DOM öğeleri, değişkenleri ve işlevleri ayrıştırılmamış veya oluşturulmamış olabilir. Mümkünse

HTML DOM'a erişmeden önce complete olayını bekleyin.

Örneğin, aşağıdaki HTML sayfasına bakın:

<html> <script> foo = 333; function test() { return "OK."; } </script> <body> <p id="p1">Hi.</p> </body> </html>

Bu basit HTML sayfası foo adlı bir JavaScript değişkeni ve test() adlı bir JavaScript işlevi tanımlar. Bunların her ikisi de

sayfanın genel window nesnesinin özellikleridir. Ayrıca, window.document nesnesi, getElementById() yöntemini

kullanarak erişebileceğiniz, (p1 kimliğiyle) adlandırılan P öğesini içerir. Sayfa yüklendiğinde (HTMLLoader nesnesi

complete olayını gönderdiğinde), bu nesnelerin her birine aşağıdaki ActionScript kodunda gösterildiği şekilde

ActionScript'ten erişebilirsiniz:

var html:HTMLLoader = new HTMLLoader(); html.width = 300; html.height = 300; html.addEventListener(Event.COMPLETE, completeHandler); var xhtml:XML = <html> <script> foo = 333; function test() { return "OK."; } </script> <body> <p id="p1">Hi.</p> </body> </html>; html.loadString(xhtml.toString()); function completeHandler(e:Event):void { trace(html.window.foo); // 333 trace(html.window.document.getElementById("p1").innerHTML); // Hi. trace(html.window.test()); // OK. }

HTML öğesinin içeriğine erişmek için innerHTML özelliğini kullanın. Örneğin, önceki kod p1 adlı HTML öğesinin

içeriğini getirmek için html.window.document.getElementById("p1").innerHTML kullanır.

Page 223: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

216ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

HTML sayfasının özelliklerini ActionScript'ten de ayarlayabilirsiniz. Örneğin, aşağıdaki örnek var olan HTMLLoader

nesnesine ilişkin başvuruyu kullanarak p1 öğesinin içeriğini ve sayfadaki foo JavaScript değişkeninin değerini ayarlar:

html.window.document.getElementById("p1").innerHTML = "Goodbye"; html.window.foo = 66;

SWF içeriğini HTML'e gömme

SWF içeriğini tarayıcıda olduğu gibi AIR uygulamasında da HTML içeriğine gömebilirsiniz. SWF içeriğini object

etiketini, embed etiketini veya her ikisini de kullanarak gömün.

Not: SWF içeriğini HTML sayfasında görüntülemek için object etiketi ve embed etiketinin her ikisini de kullanmak,

yaygın bir web geliştirme uygulamasıdır. Bu uygulamanın AIR'de hiçbir yararı yoktur. AIR'de görüntülenmesi için

içerikteki W3C standart object etiketinin kendisini kullanabilirsiniz. Aynı zamanda, tarayıcıda da görüntülenen

HTML içeriği için gerektiğinde object ve embed etiketlerinin ikisini birlikte kullanmaya devam edebilirsiniz.

Aşağıdaki örnek, bir SWF dosyasını HTML içeriğinde görüntülemek için HTML object etiketinin kullanımını

gösterir. SWF dosyası uygulama dizininden yüklenir, ancak AIR tarafından desteklenen herhangi bir URL şemasını

kullanabilirsiniz. (SWF dosyasının yüklendiği kaynak, AIR'in içeriği yerleştirdiği güvenlik sanal alanını belirler.)

<object type="application/x-shockwave-flash" width="100%" height="100%"> <param name="movie" value="app:/SWFFile.swf"></param>

</object>

İçeriği dinamik olarak yüklemek için bir komut dosyası da kullanabilirsiniz. Aşağıdaki örnek, urlString

parametresinde belirtilen SWF dosyasını görüntülemek üzere bir object düğümü oluşturur. Örnek, düğümü

elementID parametresiyle belirtilen kimliğe sahip sayfa öğesinin alt öğesi olarak ekler.

<script> function showSWF(urlString, elementID){

var displayContainer = document.getElementById(elementID); displayContainer.appendChild(createSWFObject(urlString,650,650));

} function createSWFObject(urlString, width, height){

var SWFObject = document.createElement("object"); SWFObject.setAttribute("type","application/x-shockwave-flash"); SWFObject.setAttribute("width","100%"); SWFObject.setAttribute("height","100%"); var movieParam = document.createElement("param"); movieParam.setAttribute("name","movie"); movieParam.setAttribute("value",urlString); SWFObject.appendChild(movieParam); return SWFObject;

} </script>

HTML sayfasında ActionScript kitaplıkları kullanma

AIR, sayfanın ActionScript sınıflarını derlenmiş bir SWF dosyasına yükleyebilmesi için HTML komut dosyası öğesini

genişletir. Kök uygulama klasörünün lib alt dizininde yer alan myClasses.swf adlı kitaplığı içe aktarmak için HTML

dosyasında yer alan aşağıdaki komut dosyasını dahil edin:

<script src="lib/myClasses.swf" type="application/x-shockwave-flash"></script>

Page 224: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

217ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

Önemli: Kitaplığın düzgün biçimde yüklenmesi için tür niteliği type="application/x-shockwave-flash"

olmalıdır.

AIR dosyası paketlendiğinde lib dizini ve myClasses.swf dosyası da dahil edilmelidir.

İçe aktarılan sınıflara JavaScript Window nesnesinin runtime özelliği aracılığıyla erişin:

var libraryObject = new window.runtime.LibraryClass();

SWF dosyasındaki sınıflar paketler halinde düzenlenmişse, paket adını da eklemelisiniz. Örneğin, LibraryClass tanımı

utilities adlı paketteyse, aşağıdaki ifadeyi içeren sınıf örneğini oluşturursunuz:

var libraryObject = new window.runtime.utilities.LibraryClass();

Not: ActionScript SWF kitaplığını AIR'de yer alan bir HTML sayfasının parçası olarak kullanmak üzere derlemek için

acompc derleyicisini kullanın. Acompc yardımcı programı, Flex 3 SDK'nin parçasıdır ve Flex 3 SDK belgesinde açıklanır.

HTML DOM ve JavaScript nesnelerine içe aktarılan bir ActionScript

dosyasından erişme

<script> etiketi kullanılarak sayfaya aktarılmış bir SWF dosyasındaki ActionScript'ten HTML sayfasındaki nesnelere

erişmek için, window veya document gibi bir JavaScript nesnesine ilişkin başvuruyu ActionScript kodunda tanımlanan

bir işleve iletin. JavaScript nesnesine (veya iletilen başvuru aracılığıyla erişilebilen diğer nesnelere) erişmek için

işlevdeki başvuruyu kullanın.

Örneğin, aşağıdaki HTML sayfasına bakın:

<html> <script src="ASLibrary.swf" type="application/x-shockwave-flash"></script> <script> num = 254; function getStatus() { return "OK."; } function runASFunction(window){ var obj = new runtime.ASClass(); obj.accessDOM(window); } </script> <body onload="runASFunction"> <p id="p1">Body text.</p> </body> </html>

Bu basit HTML sayfası num adlı bir JavaScript değişkeni ve getStatus() adlı bir JavaScript işlevi içerir. Bunların her ikisi

de sayfanın window nesnesinin özellikleridir. Ayrıca, window.document nesnesi (p1 kimliğiyle) adlandırılan bir P

öğesi içerir.

Sayfa, ASClass sınıfını içeren “ASLibrary.swf” adlı ActionScript dosyasını yükler. ASClass, bu JavaScript nesnelerinin

değerlerini izleyen accessDOM() adlı bir işlev tanımlar. accessDOM() yöntemi JavaScript Window nesnesini

argüman olarak alır. Window başvurusunu kullanarak, aşağıdaki tanımda gösterildiği şekilde değişkenler, işlevler ve

DOM öğeleri dahil sayfadaki diğer nesnelere erişebilir:

Page 225: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

218ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

public class ASClass{ public function accessDOM(window:*):void { trace(window.num); // 254 trace(window.document.getElementById("p1").innerHTML); // Body text.. trace(window.getStatus()); // OK. } }

İçe aktarılan ActionScript sınıfından HTML sayfasının özelliklerini getirebilir ve ayarlayabilirsiniz. Örneğin, aşağıdaki

işlev sayfadaki p1 öğesinin içeriğini ayarlar ve foo JavaScript değişkeninin değerini belirler:

public function modifyDOM(window:*):void { window.document.getElementById("p1").innerHTML = "Bye"; window.foo = 66;

Date ve RegExp nesnelerini dönüştürme

JavaScript ve ActionScript dillerinin her ikisi de Date ve RegExp sınıflarını tanımlar, ancak bu türdeki nesneler iki

yürütme bağlamı arasında otomatik olarak dönüştürülmez. Date ve RegExp nesnelerini farklı yürütme

bağlamlarındaki özellikleri ve işlev parametrelerini ayarlamak için kullanmadan önce eşdeğer türe dönüştürmelisiniz.

Örneğin, aşağıdaki ActionScript kodu, jsDate adlı JavaScript Date nesnesini ActionScript Date nesnesine

dönüştürür:

var asDate:Date = new Date(jsDate.getMilliseconds());

Aşağıdaki ActionScript kodu, jsRegExp adlı JavaScript RegExp nesnesini ActionScript RegExp nesnesine

dönüştürür:

var flags:String = ""; if (jsRegExp.dotAll) flags += "s"; if (jsRegExp.extended) flags += "x"; if (jsRegExp.global) flags += "g"; if (jsRegExp.ignoreCase) flags += "i"; if (jsRegExp.multiline) flags += "m"; var asRegExp:RegExp = new RegExp(jsRegExp.source, flags);

HTML stil sayfasını ActionScript'ten değiştirme

HTMLLoader nesnesi complete olayını gönderdiğinde, sayfadaki CSS stillerini inceleyebilir ve değiştirebilirsiniz.

Örneğin, aşağıdaki basit HTML belgesine bakın:

Page 226: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

219ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

<html> <style> .style1A { font-family:Arial; font-size:12px } .style1B { font-family:Arial; font-size:24px } </style> <style> .style2 { font-family:Arial; font-size:12px } </style> <body> <p class="style1A"> Style 1A </p> <p class="style1B"> Style 1B </p> <p class="style2"> Style 2 </p> </body> </html>

HTMLLoader nesnesi bu içeriği yükledikten sonra sayfadaki CSS stillerini burada gösterildiği şekilde

window.document.styleSheets dizisinin cssRules dizisi yoluyla değiştirebilirsiniz:

var html:HTMLLoader = new HTMLLoader( ); var urlReq:URLRequest = new URLRequest("test.html"); html.load(urlReq); html.addEventListener(Event.COMPLETE, completeHandler); function completeHandler(event:Event):void { var styleSheet0:Object = html.window.document.styleSheets[0]; styleSheet0.cssRules[0].style.fontSize = "32px"; styleSheet0.cssRules[1].style.color = "#FF0000"; var styleSheet1:Object = html.window.document.styleSheets[1]; styleSheet1.cssRules[0].style.color = "blue"; styleSheet1.cssRules[0].style.font-family = "Monaco"; }

Bu kod CSS stillerini, elde edilen HTML belgesinin aşağıdaki gibi görüneceği biçimde ayarlar:

HTMLLoader nesnesi complete olayını gönderdikten sonra kodun sayfaya stiller ekleyebileceğini göz önünde

bulundurun.

Page 227: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

220ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği

Çalıştırma zamanı güvenlik modeli kodu farklı kaynaklardan ayırır. Farklı güvenlik sanal alanlarında içerik için komut

dosyası oluşturarak bir güvenlik sanal alanındaki içeriğin diğer sanal alandaki seçilen özellikler ve yöntemlere

erişmesini sağlayabilirsiniz.

AIR güvenlik sanal alanları ve JavaScript kodu

AIR, bir etki alanındaki kodun diğer etki alanındaki içerikle etkileşime girmesini engelleyen bir aynı kaynak politikası

uygular. Tüm dosyalar, kaynakları temel alınarak bir sanal alana yerleştirilir. Genellikle uygulama sanal alanındaki

içerik aynı kaynak ilkesini ihlal edemez ve uygulama yükleme dizininin dışından yüklenen içerik için çapraz komut

dosyası oluşturur. Ancak, AIR uygulama dışı içeriğe ilişkin çapraz komut dosyası oluşturmanızı sağlayan birkaç teknik

sunar.

Bir teknik, uygulama içeriğini farklı bir güvenlik sanal alanına eşlemek için çerçeveleri veya iframe'leri kullanır.

Uygulamanın sanal alanlı bölümünden yüklenen tüm sayfalar, uzak etki alanından yüklenmiş gibi davranır. Örneğin,

bu içerik uygulama içeriğini example.com etki alanına yükleyerek example.com'dan yüklenen sayfalar için çapraz

komut dosyası oluşturabilir.

Teknik uygulama içeriğini farklı bir sanal alana yerleştirdiğinden, bu içerikte bulunan kod artık değerlendirilen

dizelerdeki kod yürütmesine ilişkin kısıtlamalara tabi değildir. Bu sanal alan eşleme tekniğini, uzak içerik için çapraz

komut dosyası oluşturmanız gerekmese bile, bu kısıtlamaları kolaylaştırmak için kullanabilirsiniz. İçeriği bu şekilde

eşlemek özellikle birden çok JavaScript çerçevesinden biriyle veya dizelerin değerlendirilmesine dayanan mevcut kodla

çalışırken kullanışlıdır. Ancak, güvenli olmayan içeriğin uygulama sanal alanı dışında çalışırken yerleştirilip ve

yürütülebiliyor olması riskini göz önünde bulundurun ve buna karşı önlem alın.

Aynı zamanda, başka bir sanal alana eşlenen uygulama içeriği AIR API'lerine erişimini kaybeder, bu nedenle sanal alan

eşleme tekniği AIR işlevlerini uygulama sanal alanının dışında yürütülen koda göstermek için kullanılamaz.

Diğer bir çapraz komut dosyası oluşturma tekniği, uygulama dışı sanal alandaki içerikle bunun uygulama sanal

alanında bulunan üst belgesindeki içerik arasında sanal alan köprüsü adı verilen bir arabirim oluşturmanıza olanak

verir. Köprü, alt içeriğin üst içerik tarafından tanımlanan özellikler ve yöntemlere erişmesini, üst içeriğin alt içerik

tarafından tanımlanan özellikler ve yöntemlere erişmesini, veya bunların her ikisini sağlar.

Son olarak, uygulama sanal alanından ve isteğe bağlı olarak diğer sanal alanlardan etki alanları arası XMLHttpRequests

de gerçekleştirebilirsiniz.

Daha fazla bilgi için bkz. “HTML kare ve iframe öğeleri” sayfa 201, “HTML güvenliği” sayfa 29, ve “XMLHttpRequest

nesnesi” sayfa 195.

Uygulama içeriğini uygulama dışı sanal alana yükleme

Uygulama içeriğinin uygulama yükleme dizininin dışından yüklenen içerik için güvenli biçimde çapraz komut dosyası

oluşturmasını sağlamak amacıyla, uygulama içeriğini harici içerikle aynı güvenlik sanal alanına yüklemek için kare

veya iframe öğelerini kullanın. Uzak içerik için çapraz komut dosyası oluşturmanız gerekmiyorsa, ancak yine de

uygulamanızın bir sayfasını uygulama sanal alanının dışından yüklemek istiyorsanız kaynak etki alanı olarak

http://localhost/ veya başka bir zararsız değer kullanın.

AIR, çerçeveye yüklenen uygulama dosyasının uygulama dışı bir sanal alana eşlenmesi gerekip gerekmediğini

belirlemenizi sağlayan kare öğesine yeni sandboxRoot ve documentRoot niteliklerini ekler. sandboxRoot URL'sinin

altındaki bir yola çözümlenen dosyalar bunun yerine documentRoot dizininden yüklenir. Güvenlik nedenleriyle, bu

şekilde yüklenen uygulama içeriği, sandboxRoot URL'sinden yüklenmiş gibi ele alınır.

Page 228: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

221ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

sandboxRoot özelliği, kare içeriğinin yerleştirileceği sanal alan ve etki alanını belirlemek için kullanılacak URL'yi

belirtir. URL şemasının kullanması gereken file:, http: veya https:. İlişkili bir URL belirtirseniz, içerik uygulama

sanal alanında kalır.

documentRoot özelliği, çerçeve içeriğinin yükleneceği kaynak dizini belirtir. URL şemasının kullanması gereken

file:, app: veya app-storage:.

Aşağıdaki örnek, uygulamanın sanal alan alt dizinine yüklenen içeriği uzak sanal alanda ve www.example.com etki

alanında çalışacak biçimde eşler:

<iframe src="http://www.example.com/local/ui.html" sandboxRoot="http://www.example.com/local/" documentRoot="app:/sandbox/"> </iframe>

ui.html sayfası aşağıdaki komut dosyası etiketini kullanarak yerel sanal alan klasöründen bir javascript dosyası

yükleyebilir:

<script src="http://www.example.com/local/ui.js"></script>

Ayrıca, aşağıdaki gibi komut dosyası etiketini kullanarak uzak sunucudaki bir dizinden de içerik yükleyebilir:

<script src="http://www.example.com/remote/remote.js"></script>

sandboxRoot URL'si, uzak sunucuda bulunan aynı URL'deki tüm içeriği maskeler. Yukarıdaki örnekte, AIR, isteği

yerel uygulama dizinine yeniden eşlediğinden www.example.com/local/ linkindeki (veya onun alt dizinlerinden

birindeki) uzak içeriğe erişemezsiniz. İstekler, sayfada gezinmesinden, XMLHttpRequest'ten veya tüm diğer içerik

yükleme yöntemlerinden türetilseler de yeniden eşlenirler.

Sanal alan köprü arabirimini kurma

Uygulama sanal alanındaki içeriğin uygulama dışı bir sanal alandaki içerik tarafından tanımlanan özellikler ve

yöntemlere erişmesi veya uygulama dışı içeriğin uygulama sanal alanındaki içerik tarafından tanımlanan özellikler

veya yöntemlere erişmesi gerektiğinde sanal alan köprüsü kullanmalısınız. Herhangi bir alt belgenin window nesnesine

ait childSandboxBridge ve parentSandboxBridge özellikleriyle bir köprü oluşturun.

Alt sanal alan köprüsü oluşturma

childSandboxBridge özelliği, alt belgenin üst belgedeki içeriğe bir arabirim göstermesine olanak verir. Arabirim

göstermek için childSandbox özelliğini alt belgedeki bir işleme veya nesneye ayarlarsınız. Böylece nesneye veya işleve

üst belgedeki içerikten erişebilirsiniz. Aşağıdaki örnek, alt belgede çalışan bir komut dosyasının bir işlev ve bir özellik

içeren nesneyi üst öğesine nasıl gösterdiğini açıklar:

var interface = {}; interface.calculatePrice = function(){ return ".45 cents"; } interface.storeID = "abc" window.childSandboxBridge = interface;

Bu alt içerik, “alt” kimliği atanmış bir iframe'e yüklendiyse, karenin childSandboxBridge özelliğini okuyarak üst

içerikten arabirime erişebilirsiniz.

var childInterface = document.getElementById("child").contentWindow.childSandboxBridge; air.trace(childInterface.calculatePrice()); //traces ".45 cents" air.trace(childInterface.storeID)); //traces "abc"

Page 229: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

222ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

Üst sanal alan köprüsü oluşturma

parentSandboxBridge özelliği, üst belgenin alt belgedeki içeriğe bir arabirim göstermesine olanak verir. Üst belge,

arabirim göstermek için alt belgenin parentSandbox özelliğini üst belgede tanımlanmış bir işleve veya nesneye

ayarlar. Böylece nesneye veya işleve alt belgedeki içerikten erişebilirsiniz. Aşağıdaki örnek, üst karede çalışan bir komut

dosyasının işlev içeren bir nesneyi alt belgeye nasıl gösterdiğini açıklar:

var interface = {}; interface.save = function(text){ var saveFile = air.File("app-storage:/save.txt"); //write text to file } document.getElementById("child").contentWindow.parentSandboxBridge = interface;

Alt karedeki içerik, bu arabirimi kullanarak metni save.txt adlı bir dosyaya kaydedebilir, ancak dosya sistemine

bunun dışında herhangi bir erişimi olmayacaktır. Alt içerik saklama işlevini aşağıdaki şekilde çağırabilir:

var textToSave = "A string."; window.parentSandboxBridge.save(textToSave);

Uygulama içeriği, diğer sanal alanlara mümkün olan en dar arabirimi göstermelidir. Uygulama dışı içerik, yanlışlıkla

veya kötü amaçla kod yerleştirmesine maruz kalabileceğinden yapısı gereği güvenilmez olarak ele alınmalıdır. Üst

sanal alan köprüsü aracılığıyla gösterdiğiniz arabirimin hatalı kullanımını engellemek için uygun korumaları yerine

koymalısınız.

Sayfa yükleme sırasında üst sanal alan köprüsüne erişme

Alt belgedeki komut dosyasının bir üst sanal alan köprüsüne erişmesi için, köprü komut dosyası çalıştırılmadan

kurulmalıdır. Yeni bir sayfa DOM'u oluşturulduğunda, ancak herhangi bir komut dosyası ayrıştırılmadan veya DOM

öğeleri eklenmeden pencere, kare ve iframe bir dominitialize olayı gönderir. Sayfa yapım sırasında, köprüyü alt

belgedeki tüm komut dosyalarının erişebileceği kadar erken oluşturmak için dominitialize olayını kullanabilirsiniz.

Aşağıdaki örnek, alt kareden gönderilen dominitialize olayına karşılık olarak üst sanal alan köprüsünün nasıl

oluşturulacağını gösterir:

<html> <head> <script> var bridgeInterface = {}; bridgeInterface.testProperty = "Bridge engaged"; function engageBridge(){ document.getElementById("sandbox").contentWindow.parentSandboxBridge = bridgeInterface; } </script> </head> <body> <iframe id="sandbox" src="http://www.example.com/air/child.html" documentRoot="app:/" sandboxRoot="http://www.example.com/air/" ondominitialize="engageBridge()"/> </body> </html>

Aşağıdaki child.html belgesi, alt içeriğin üst sanal alan köprüsüne nasıl erişebileceğini gösterir:

Page 230: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

223ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ve JavaScript'te programlama

<html> <head> <script> document.write(window.parentSandboxBridge.testProperty); </script> </head> <body></body> </html>

Kare yerine alt penceredeki dominitialize olayını dinlemek için dinleyiciyi window.open() işleviyle oluşturulan

yeni alt window nesnesine eklemelisiniz:

var childWindow = window.open(); childWindow.addEventListener("dominitialize", engageBridge()); childWindow.document.location = "http://www.example.com/air/child.html";

Bu durumda, uygulama içeriğini uygulama dışı bir sanal alana eşlemenin yolu yoktur. Bu teknik, yalnızca child.html

öğesi uygulama dizininin dışından yüklendiğinde kullanışlıdır. Yine de penceredeki uygulama içeriğini uygulama dışı

bir sanal alana eşleyebilirsiniz, ancak öncesinde alt belgeyi yüklemek ve bunu istenen sanal alana eşlemek için kendisi

çerçeveler kullanan bir ara sayfa yüklemelisiniz.

Pencere oluşturmak için HTMLLoader sınıfının createRootWindow() işlevini kullandığınızda, yeni pencere

createRootWindow() öğesinin çağrıldığı kaynak belgenin alt öğesi değildir.. Bu nedenle, çağıran pencere ve yeni

pencereye yüklenen uygulama dışı içerik arasında sanal alan köprüsü oluşturamazsınız. Bunun yerine, alt belgeyi

yüklemek için kendisi çerçeveler kullanan yeni pencereye bir ara pencere yükleme işlevini kullanmalısınız. Yeni

pencerenin üst belgesi ve kareye yüklenen alt belge arasında köprü oluşturabilirsiniz.

Page 231: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

224

Bölüm 22: HTML ile ilgili olayları işleme

Olay işleme sistemi, programcıların kullanıcı girişlerine ve sistem olaylarına pratik bir şekilde yanıt vermesini sağlar.

Adobe® AIR™ olay modeli hem pratik, hem de standartlara uygundur. Belge Nesnesi Modeli (DOM) Düzey 3 Olaylar

Tanımlaması'na dayalı olarak, endüstri standartlarında bir olay işleme mimarisi olan olay modeli, programcılara güçlü

ve sezgisel bir olay işleme aracı sunar.

HTMLLoader olayları

Bir HTMLLoader nesnesi aşağıdaki ActionScript™ olaylarını gönderir:

Bir ActionScript işlevini JavaScript olayı için de kaydedebilirsiniz (onClick gibi). Ayrıntılar için bkz. “DOM olaylarını

ActionScript ile işleme” sayfa 224.

DOM olaylarını ActionScript ile işleme

ActionScript işlevlerini JavaScript olaylarına yanıt vermesi için kaydedebilirsiniz. Örneğin aşağıdaki HTML içeriğini

düşünün:

<html> <body> <a href="#" id="testLink">Click me.</a> </html>

Bir ActionScript işlevini sayfadaki herhangi bir olay için işleyici olarak kaydedebilirsiniz. Örneğin aşağıdaki kod

clickHandler() işlevini, HTML sayfasındaki testLink öğesinin onclick olayının dinleyicisi olarak ekler:

Olay Açıklama

htmlDOMInitialize HTML belgesi oluşturulduğunda, ancak herhangi bir komut ayrıştırılmadan veya DOM düğümleri

sayfaya eklenmeden gönderilir.

complete HTML sayfasındaki onload olayından hemen sonra, HTML DOM bir yükleme işlemine yanıt olarak

yaratıldığında gönderilir.

htmlBoundsChanged contentWidth ve contentHeight özelliklerinden biri veya her ikisi de değiştiğinde gönderilir.

locationChange HTMLLoader öğesinin konum özelliği değiştiğinde gönderilir.

scroll HTML motoru kaydırma konumunu her değiştirdiğinde gönderilir. Scroll olaylarının nedeni sayfadaki

çapa linklerinde (# linkleri) gezinme veya window.scrollTo() yöntemine yapılan çağrılar olabilir.

Bir metin girişine veya metin alanına metin girmek de scroll olayına neden olabilir.

uncaughtScriptException HTMLLoader öğesinde bir JavaScript istisnası oluştuğunda ve istisna JavaScript kodunda

yakalanmadığında gönderilir.

Page 232: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

225ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ile ilgili olayları işleme

var html:HTMLLoader = new HTMLLoader( ); var urlReq:URLRequest = new URLRequest("test.html"); html.load(urlReq); html.addEventListener(Event.COMPLETE, completeHandler); function completeHandler(event:Event):void { html.window.document.getElementById("testLink").onclick = clickHandler; } function clickHandler():void { trace("You clicked it!"); }

Bu olaylar için kayıt yaparken addEventListener() yöntemini de kullanabilirsiniz. Örneğin önceki örnekteki

completeHandler() yöntemini aşağıdaki kodla değiştirebilirsiniz:

function completeHandler(event:Event):void { var testLink:Object = html.window.document.getElementById("testLink"); testLink.addEventListener("click", clickHandler); }

Bir dinleyici belirli bir DOM öğesine başvurduğunda, olay dinleyicilerini eklemeden önce HTMLLoader üst öğesinin

complete olayını göndermesini beklemek yerinde bir uygulama olur. HTML sayfaları genellikle birden çok dosya

yükler ve tüm dosyalar yüklenip ayrıştırılana kadar HTML DOM tamamen oluşturulmaz. Tüm öğeler

oluşturulduğunda, HTMLLoader complete olayını gönderir.

Yakalanmayan JavaScript istisnalarına yanıt verme

Aşağıdaki HTML'ye bakın:

<html> <head> <script> function throwError() { var x = 400 * melbaToast; } </script> </head> <body> <a href="#" onclick="throwError()">Click me.</a> </html>

melbaToast adlı bilinmeyen değişkene başvuran throwError() JavaScript işlevini içerir:

var x = 400 * melbaToast;

JavaScript işlemi, JavaScript kodunda try/catch yapısıyla yakalanmayan geçersiz bir işlemle karşılaştığında, sayfayı

içeren HTMLLoader nesnesi bir HTMLUncaughtScriptExceptionEvent olayı gönderir. Aşağıdaki kodda olduğu gibi,

bu olay için bir işleyici kaydedebilirsiniz:

Page 233: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

226ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ile ilgili olayları işleme

var html:HTMLLoader = new HTMLLoader(); var urlReq:URLRequest = new URLRequest("test.html"); html.load(urlReq); html.width = container.width; html.height = container.height; container.addChild(html); html.addEventListener(HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION, htmlErrorHandler); function htmlErrorHandler(event:HTMLUncaughtJavaScriptExceptionEvent):void { event.preventDefault(); trace("exceptionValue:", event.exceptionValue) for (var i:int = 0; i < event.stackTrace.length; i++) { trace("sourceURL:", event.stackTrace[i].sourceURL); trace("line:", event.stackTrace[i].line); trace("function:", event.stackTrace[i].functionName); } }

JavaScript'in içinde, window.htmlLoader özelliğini kullanarak aynı olayı işleyebilirsiniz:

<html> <head> <script language="javascript" type="text/javascript" src="AIRAliases.js"></script> <script> function throwError() { var x = 400 * melbaToast; } function htmlErrorHandler(event) { event.preventDefault(); var message = "exceptionValue:" + event.exceptionValue + "\n"; for (var i = 0; i < event.stackTrace.length; i++){ message += "sourceURL:" + event.stackTrace[i].sourceURL +"\n"; message += "line:" + event.stackTrace[i].line +"\n"; message += "function:" + event.stackTrace[i].functionName + "\n"; } alert(message); } window.htmlLoader.addEventListener("uncaughtScriptException", htmlErrorHandler); </script> </head> <body> <a href="#" onclick="throwError()">Click me.</a> </html>

htmlErrorHandler() olay işleyicisi, olayın varsayılan davranışını (JavaScript hata mesajını AIR izleme çıktısına

göndermeyi) iptal eder ve kendi çıktı mesajını oluşturur. HTMLUncaughtScriptExceptionEvent nesnesinin

exceptionValue öğesinin değerini çıkarır. stackTrace dizisindeki her bir nesnenin özelliklerini çıkarır:

Page 234: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

227ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ile ilgili olayları işleme

exceptionValue: ReferenceError: Can't find variable: melbaToast sourceURL: app:/test.html line: 5 function: throwError sourceURL: app:/test.html line: 10 function: onclick

Çalışma zamanı olaylarını JavaScript'le işleme

runtime sınıfları, addEventListener() yöntemiyle olay işleyicileri eklemeyi destekler. Bir olay için işleyici işlevi

eklemek üzere, olay türünü ve işleme işlevini sağlayarak olayı gönderen nesnenin addEventListener() yöntemini

çağırın. Örneğin kullanıcı başlık çubuğunda pencereyi kapatma düğmesini tıkladığında gönderilen closing olayını

dinlemek için, aşağıdaki ifadeyi kullanın:

window.nativeWindow.addEventListener(air.NativeWindow.CLOSING, handleWindowClosing);

Olay işleyici işlevi yaratma

Aşağıdaki kod, ana pencerenin konumu hakkında bilgi görüntüleyen basit bir HTML dosyası oluşturur.

moveHandler() adlı bir işleyici işlevi, ana pencerenin move olayını dinler (NativeWindowBoundsEvent sınıfı

tarafından tanımlanan).

<html> <script src="AIRAliases.js" /> <script> function init() { writeValues(); window.nativeWindow.addEventListener(air.NativeWindowBoundsEvent.MOVE, moveHandler); } function writeValues() { document.getElementById("xText").value = window.nativeWindow.x; document.getElementById("yText").value = window.nativeWindow.y; } function moveHandler(event) { air.trace(event.type); // move writeValues(); } </script> <body onload="init()" /> <table> <tr> <td>Window X:</td> <td><textarea id="xText"></textarea></td> </tr> <tr> <td>Window Y:</td> <td><textarea id="yText"></textarea></td> </tr> </table> </body> </html>

Page 235: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

228ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ile ilgili olayları işleme

Bir kullanıcı pencereyi taşıdığında, metin alanı öğeleri pencerenin güncellenen X ve Y konumlarını görüntüler.

Olay nesnesinin bir argüman olarak moveHandler() yöntemine iletildiğine dikkat edin. Olay parametresi işleyici

işlevinizin olay nesnesini incelemesini sağlar. Bu örnekte olay nesnesinin type özelliğini, olayın bir move olayı

olduğunu bildirmek için kullanırsınız.

Olay dinleyicilerini kaldırma

Artık ihtiyacınız olmayan bir olay dinleyicisini kaldırmak için removeEventListener() yöntemini kullanabilirsiniz.

Artık kullanılmayacak olan olay dinleyicilerinin tümünü kaldırmak yararlı olacaktır. Gerekli parametreler eventName

ve listener parametreleridir, bunlar addEventListener() yöntemi için gereken parametrelerle aynıdır.

Gezinilen HTML sayfalarındaki olay dinleyicilerini kaldırma

HTML içeriği gezindiğinde veya içeriğe sahip pencere kapatıldığı için HTML içeriği atıldığında, boşaltılan sayfadaki

nesnelere başvuran olay dinleyicileri otomatik olarak kaldırılmaz. Bir nesne, işleyiciye önceden boşaltılmış bir olay

gönderdiğinde, şu hata mesajını görürsünüz: "Uygulama, artık yüklü olmayan bir HTML sayfasındaki JavaScript

nesnesine başvurma girişiminde bulundu." (The application attempted to reference a JavaScript object in an HTML

page that is no longer loaded.)

Bu hatayı önlemek için, atılmadan önce HTML sayfasındaki JavaScript olay dinleyicilerini kaldırın. Sayfa gezinmesi

durumunda (HTMLLoader nesnesinin içinde), window nesnesinin unload olayı sırasında olay dinleyicisini kaldırın.

Örneğin aşağıdaki JavaScript kodu, uncaughtScriptException olayı için bir olay dinleyicisini kaldırır:

window.onunload = cleanup; window.htmlLoader.addEventListener('uncaughtScriptException', uncaughtScriptException); function cleanup() { window.htmlLoader.removeEventListener('uncaughtScriptException', uncaughtScriptExceptionHandler); }

HTML içeriğine sahip pencereler kapatılırken hata oluşmasını önlemek için, NativeWindow nesnesinin

(window.nativeWindow) closing olayına yanıt olarak bir temizleme işlevi çağırın. Örneğin aşağıdaki JavaScript

kodu, uncaughtScriptException olayı için bir olay dinleyicisini kaldırır:

window.nativeWindow.addEventListener(air.Event.CLOSING, cleanup); function cleanup() { window.htmlLoader.removeEventListener('uncaughtScriptException', uncaughtScriptExceptionHandler); }

Ayrıca bir olay dinleyicisini çalışır çalışmaz kaldırarak da bu hatanın oluşmasını önleyebilirsiniz. Örneğin aşağıdaki

JavaScript kodu, HTMLLoader nesnesinin createRootWindow() yöntemini çağırarak bir html penceresi oluşturur ve

complete olayı için bir olay dinleyicisi ekler. complete olay işleyicisi çağrıldığında, removeEventListener() işlevini

kullanarak kendi olay dinleyicisini kaldırır:

var html = runtime.flash.html.HTMLLoader.createRootWindow(true); html.addEventListener('complete', htmlCompleteListener); function htmlCompleteListener() { html.removeEventListener(complete, arguments.callee) // handler code.. } html.load(new runtime.flash.net.URLRequest("second.html"));

Page 236: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

229ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML ile ilgili olayları işleme

Gerekmeyen olay dinleyicilerini kaldırmak da sistem çöp toplayıcısının bu dinleyicilerle ilişkilendirilen tüm belleği

geri istemesini sağlar.

Var olan olay dinleyicilerini kontrol etme

hasEventListener() yöntemi sayesinde bir nesnede olay dinleyicisi olup olmadığını kontrol edebilirsiniz.

Page 237: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

230

Bölüm 23: HTML Kabı için Komut Dosyası Oluşturma

HTMLLoader sınıfı, Adobe® AIR™ içindeki HTML içeriği için konteyner olarak görev yapar. Bu sınıf, ActionScript™

3.0 görüntü listesindeki nesnenin davranışı ve görünümünün denetlenmesi için Sprite sınıfından miras alınan birçok

özellik ve yöntem sağlar. Sınıf ayrıca, HTML içeriğinin yüklenmesi, HTML içeriğiyle etkileşim kurulması ve geçmişin

yönetilmesi gibi görevlere ilişkin özellikleri ve yöntemleri tanımlar.

HTMLHost sınıfı, HTMLLoader için bir dizi varsayılan davranış tanımlar. HTMLLoader nesnesini

oluşturduğunuzda, HTMLHost uygulaması sağlanmaz. Bu nedenle HTML içeriği pencere konumunun veya pencere

başlığının değiştirilmesi gibi varsayılan davranışlardan birini tetiklediğinde, hiçbir şey gerçekleşmez. Uygulamanız

için istenen davranışları tanımlamak için HTMLHost sınıfını genişletebilirsiniz.

AIR tarafından oluşturulan HTML pencereleri için varsayılan bir HTMLHost uygulaması sağlanmıştır. True olarak

ayarlanmış defaultBehavior parametresiyle oluşturulan yeni HTMLHost nesnesini kullanarak nesnenin htmlHost

özelliğini ayarlama yoluyla, varsayılan HTMLHost uygulamasını başka bir HTMLLoader nesnesine atayabilirsiniz.

HTMLLoader nesnelerinin görüntü özellikleri

HTMLLoader nesnesi, Adobe® Flash® Player Sprite sınıfının görüntü özelliklerini miras alır. Örneğin arka plan rengini

değiştirebilir, yeniden boyutlandırabilir, taşıyabilir ve gizleyebilirsiniz. Veya filtreler, maskeler, ölçeklendirme ve

döndürme gibi gelişmiş efektler uygulayabilirsiniz. Efektleri uygularken, okunaklılık üzerindeki etkilerini göz önüne

alın. HTML sayfasına yüklenen SWF ve PDF içeriği, bazı efektler uygulandığında görüntülenemez.

HTML pencereleri, HTML içeriğini oluşturan bir HTMLLoader nesnesi içerir. Bu nesne pencere alanı içinde

sınırlanmıştır, bu nedenle boyut, konum, döndürme veya ölçek faktörünün değiştirilmesi her zaman istenen sonuçları

vermez.

Temel görüntü özellikleri

HTMLLoader nesnesinin temel görüntü özellikleri, boyutu ayarlamak ve denetimi göstermek veya gizlemek için üst

display nesnesi içinde denetimi konumlandırmanıza olanak verir. HTML penceresinin HTMLLoader nesnesi için bu

özellikleri değiştirmemelisiniz.

Temel özellikler:

HTML penceresi dışında, HTMLLoader nesnesinin geni�lik ve yükseklik özellikleri varsayılan olarak 0'dır.

Yüklenen HTML içeriği görünür olmadan önce genişlik ve yüksekliği ayarlamalısınız. HTML içeriği HTMLLoader

boyutuna çizilir, içerikteki HTML ve CSS özelliklerine göre şekillendirilir. HTMLLoader boyutunun değiştirilmesi

içeriği yeniden akıtır.

Özellik Notlar

x, y Nesneyi üst kabı içinde

geni�lik, yükseklik Görüntü alanının boyutlarını değiştirir.

görünür Nesnenin ve sahip olduğu tüm içeriğin görünürlüğünü denetler.

Page 238: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

231ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

Yeni bir HTMLLoader nesnesine (halen 0 olarak ayarlanmış width içeren) içerik yüklerken HTMLLoader görüntü

geni�li�i ve yüksekli�inicontentWidth ve contentHeight özelliklerini kullanarak ayarlamak size uygun

gelebilir. Bu teknik, HTML ve CSS akış kurallarına göre şekillendirildiğinde belirli bir minimum genişliğe sahip olan

sayfalar için çalışır. Ancak, bazı sayfalar HTMLLoader tarafından sağlanan belirli bir genişlik olmadığında uzun ve dar

bir mizanpajın içine akar.

Not: HTMLLoader nesnesinin genişliğini ve yüksekliğini değiştirdiğinizde, scaleX ve scaleY değerleri diğer birçok display

nesnesindekinin aksine değişmez.

HTMLLoader içeriğinin şeffaflığı

HTMLLoader nesnesinin varsayılan olarak true olan paintsDefaultBackground özelliği HTMLLoader nesnesinin

opak bir arka plan çizip çizmeyeceğini belirler. paintsDefaultBackground öğesi false olduğunda, arka plan boştur.

Display nesnesi konteyneri veya HTMLLoader nesnesinin altındaki diğer display nesneleri, HTML içeriğinin ön plan

öğelerinin arkasında görünür.

HTML belgesinin gövde öğesi veya diğer öğelerinden biri bir arka plan rengi belirlediğinde (örneğin,

style="background-color:gray"), HTML'in bu bölümünün arka plan rengi opaktır ve belirlenen arka plan

rengiyle oluşturulur. HTMLLoader nesnesinin opaqueBackground özelliğini ayarladığınızda ve

paintsDefaultBackground öğesi false olduğunda, opaqueBackground renk kümesi görünür.

Not: HTML belgesindeki öğe için alfa harmanlamalı bir arka plan sağlamak için şeffaf, PNG formatonda bir grafik

kullanabilirsiniz. HTML öğesinin opaklık stilini ayarlama desteklenmez.

HTMLLoader içeriğini ölçekleme

HTMLLoader nesnesini 1.0 dışında bir ölçek faktörüyle ölçeklemekten kaçının. HTMLLoader içeriğindeki metin

belirli bir çözünürlükte oluşturulur ve HTMLLoader nesnesi ölçeklendiğinde pikseller halinde görünebilir. Pencere

yeniden boyutlandırıldığında HTMLLoader nesnesi ve içeriğinin ölçeklenmesini engellemek için Sahne'nin

scaleMode özelliğini StageScaleMode.NO_SCALE olarak ayarlayın.

HTML sayfasına SWF ve PDF içeriği yüklenirken dikkate alınması gerekenler

HTMLLoader nesnesine yüklenen SWF ve PDF içeriği aşağıdaki koşullarda kaybolur:

• HTMLLoader nesnesini 1.0 dışında bir faktöre ölçeklerseniz.

• HTMLLoader nesnesinin alfa özelliğini 1.0 dışında bir değere ayarlarsanız.

• HTMLLoader içeriğini döndürürseniz.

Sorunlu özellik ayarını ve etkin filtreleri kaldırdığınızda içerik yeniden görünüz.

Not: Çalışma zamanı şeffaf pencerelerde SWF veya PDF içeriğini görüntüleyemez.

HTMLLoader öğesine bu tür ortamlar yükleme hakkında daha fazla bilgi için bkz. HTML sayfasında SWF içeriği

yükleme and “PDF içeriği ekleme” sayfa 244.

Gelişmiş görüntü özellikleri

HTMLLoader sınıfı, özel efektler için kullanılabilecek birçok yöntemi miras alır. Bu efektler HTMLLoader

görüntüsüyle kullanıldıklarında genellikle sınırlamalar içerir, ancak geçişler veya diğer geçici efektler için kullanışlı

olabilir. Örneğin, kullanıcı girdisi toplamak için bir iletişim penceresi görüntülediğinizde, kullanıcı iletişim kutusunu

kapatana kadar ana pencere görüntüsünü bulanıklaştırabilirsiniz. Benzer şekilde, bir pencereyi kapatırken

görüntünün yavaşça kapanmasını sağlayabilirsiniz.

Page 239: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

232ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

Gelişmiş görüntü özellikleri şunları içerir:

Aşağıdaki örnek, tüm HTML görüntüsünü bulanıklaştırmak için filtre dizisinin nasıl ayarlanacağını gösterir:

var html:HTMLLoader = new HTMLLoader(); var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); html.load(urlReq); html.width = 800; html.height = 600; var blur:BlurFilter = new BlurFilter(8); var filters:Array = [blur]; html.filters = filters;

HTML içeriğini kaydırma

HTMLLoader sınıfı, HTML içeriği kaydırmayı denetlemenizi sağlayan aşağıdaki özellikleri içerir:

Aşağıdaki kod, scrollV özelliğini HTML içeriğinin sayfanın altına kaydırılacağı şekilde ayarlar.

Özellik Sınırlamalar

alfa HTML içeriğinin okunaklılığını azaltabilir

filtreler HTML penceresinde, dış efektler pencere kenarı tarafından kesilir.

grafikler Varsayılan arka plan dahil grafik komutlarıyla çizilen şekiller HTML içeriğinin altında görünür. Çizilen

şekillerin görünür olması için paintsDefaultBackground özelliği false olmalıdır.

opaqueBackground Varsayılan arka planın rengini değiştirmez. Bu renk katmanının görünür olması için

paintsDefaultBackground özelliği false olmalıdır.

döndürme Dikdörtgen HTMLLoader alanının köşeleri pencere kenarı tarafından kesilebilir. HTML içeriğine yüklenen

SWF ve PDF içeriği görüntülenmez.

scaleX, scaleY Oluşturulan görüntü, 1'den büyük ölçek faktörlerinde pikseller halinde görünebilir. HTML içeriğine

yüklenen SWF ve PDF içeriği görüntülenmez.

dönü�tür HTML içeriğinin okunaklılığını azaltabilir. HTML görüntüsü pencere kenarı tarafından kesilebilir.

Dönüştürme döndürme, ölçekleme veya eğriltme içeriyorsa, HTML içeriğine yüklenen SWF ve PDF içeriği

görüntülenmez.

Özellik Açıklama

contentHeight HTML içeriğinin piksel cinsinden yüksekliği.

contentWidth HTML içeriğinin piksel cinsinden genişliği.

scrollH HTMLLoader nesnesinde HTML içeriğinin yatay kaydırma konumu.

scrollV HTMLLoader nesnesinde HTML içeriğinin dikey kaydırma konumu.

Page 240: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

233ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

var html:HTMLLoader = new HTMLLoader(); html.addEventListener(Event.HTML_BOUNDS_CHANGE, scrollHTML); const SIZE:Number = 600; html.width = SIZE; html.height = SIZE; var urlReq:URLRequest = new URLRequest("http://www.adobe.com"); html.load(urlReq); this.addChild(html); function scrollHTML(event:Event):void { html.scrollV = html.contentHeight - SIZE; }

HTMLLoader, yatay ve dikey kaydırma çubukları içermez. Kaydırma çubuklarını ActionScript'te uygulayabilirsiniz.

Kaydırma çubuklarına sahip bir HTMLLoader nesnesi içeren bir pencere oluşturmak için

HTMLLoader.createRootWindow() yöntemini de kullanabilirsiniz (bkz. “HTML içeriğini kaydırarak pencereler

oluşturma” sayfa 242).

HTML geçmiş listesine erişme

HTMLLoader nesnesine yeni sayfalar yüklendiğinde, çalışma zamanı nesneye ilişkin bir geçmiş listesi tutar. Geçmiş

listesi, HTML sayfasındaki window.history nesnesine karşılık gelir. HTMLLoader nesnesi HTML geçmiş listesiyle

çalışmanızı sağlayan aşağıdaki özellikler ve yöntemleri içerir:

Geçmiş listesindeki öğeler, HistoryListItem türünde nesneler olarak saklanır. HistoryListItem sınıfı, aşağıdaki

özelliklere sahiptir:

Sınıf üyesi Açıklama

historyLength Geri ve ileri girişler dahil, geçmiş listesinin tam uzunluğu.

historyPosition Geçmiş listesindeki geçerli konum. Bu konumun önündeki geçmiş öğeleri “geri” gezinmeyi, arkasındaki öğeler

“ileri” gezinmeyi temsil eder.

historyAt() Geçmiş listesinde belirtilen konumdaki geçmiş girişine karşılık gelen URLRequest nesnesini döndürür.

historyBack() Mümkinse geçmiş listesinde geriye doğru gezinir.

historyForward() Mümkinse geçmiş listesinde geriye doğru gezinir.

historyGo() Tarayıcı geçmişinde belirtilen adım sayısı kadar gezinir. Pozitifse ileriye, negatifse geriye doğru gezinir. Sıfıra

doğru gezinme, sayfayı yeniden yükler. Liste sonunun ardındaki bir konum belirtildiğinde, listenin sonuna

gider.

Özellik Açıklama

isPost HTML sayfası POST verileri içeriyorsa true olarak ayarlanır.

originalUrl HTML sayfasının tüm yeniden yönlendirmelerden önceki orijinal URL'si.

ba�lık HTML sayfasının başlığı.

url HTML sayfasının URL'si.

Page 241: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

234ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

HTML içeriği yüklenirken kullanılan kullanıcı aracısını ayarlama

HTMLLoader sınıfı, HTMLLoader tarafından kullanılan kullanıcı aracısı dizesini ayarlamanızı sağlayan userAgent

özelliğini içerir. load() yöntemini çağırmadan önce HTMLLoader nesnesinin userAgent özelliğini ayarlayın.

HTMLLoader nesnesinde bu özelliği ayarladığınızda, load() yöntemine iletilen URLRequest öğesinin userAgent

özelliği kullanılmaz.

Bir uygulama etki alanındaki tüm HTMLLoader nesneleri tarafından kullanılan varsayılan kullanıcı aracısını

URLRequestDefaults.userAgent özelliğini kullanarak ayarlayabilirsiniz. Statik URLRequestDefaults özellikleri,

yalnızca HTMLLoader nesnelerinin load() yöntemiyle kullanılan URLRequest nesneleri için değil, tüm URLRequest

nesneleri için varsayılan olarak geçerlidir. HTMLLoader nesnesinin userAgent özelliğinin ayarlanması, varsayılan

URLRequestDefaults.userAgent ayarını geçersiz kılar.

HTMLLoader nesnesinin userAgent özelliği veya URLRequestDefaults.userAgent için kullanıcı aracı değeri

ayarlamazsanız, varsayılan AIR kullanıcı aracı değeri kullanılır. Bu varsayılan değer, aşağıdaki iki örnekte olduğu gibi

çalışma zamanı işletim sistemine (Mac OS veya Windows gibi), çalışma zamanı diline ve çalışma zamanı sürümüne

bağlı olarak değişir:

• "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko)

AdobeAIR/1.0"

• "Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0"

HTML içeriğinde kullanım için karakter kodlamasını ayarlama

HTML sayfası, aşağıdaki şekilde meta etiketini dahil ederek kullandığı karakter kodlamasını belirleyebilir:

meta http-equiv="content-type" content="text/html" charset="ISO-8859-1";

HTMLLoader nesnesinin textEncodingOverride özelliğini ayarlayarak belirli bir karakter kodlamasının

kullanılmasını sağlamak için sayfa ayarını geçersiz kılın:

var html:HTMLLoader = new HTMLLoader(); html.textEncodingOverride = "ISO-8859-1";

HTML sayfası, HTMLLoader nesnesinin textEncodingFallback özelliğini içeren bir ayar belirtmediğinde

kullanılacak HTMLLoader içeriğine ilişkin karakter kodlamasını belirleyin:

var html:HTMLLoader = new HTMLLoader(); html.textEncodingFallback = "ISO-8859-1";

textEncodingOverride özelliği, HTML sayfasındaki ayarı geçersiz kılar. Ve textEncodingOverride özelliği ile

HTML sayfasındaki ayar, textEncodingFallback özelliğini geçersiz kılar.

HTML içeriğini yüklemeden önce textEncodingOverride özelliğini veya textEncodingFallback özelliğini

ayarlayın.

Page 242: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

235ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

HTML içeriği için tarayıcı benzeri kullanıcı arabirimleri tanımlama

JavaScript, HTML içeriğini görüntüleyen pencerenin denetlenmesi için birkaç çeşitli API'ler sağlar. Bu API'ler, AIR'de

özel bir HTMLHost sınıfının uygulanmasıyla geçersiz kılınabilir.

HTMLHost sınıfının genişletilmesi hakkında

Örneğin, uygulamanız sekmeli arabirimde birden çok HTMLLoader nesnesi sunuyorsa, ana pencere başlığını değil,

sekmenin etiketini değiştirmek için yüklenen HTML sayfaları tarafından başlık değişikliklerinin yapılmasını

isteyebilirsiniz. Benzer şekilde kodunuz üst görüntüleme nesnesi konteynerindeki HTMLLoader nesnesini yeniden

konumlandırarak, HTMLLoader nesnesini içeren pencereyi taşıyarak, hiçbir şey yapmayarak veya tamamen farklı bir

şey yaparak bir window.moveTo() çağrısına yanıt verebilir.

AIR HTMLHost sınıfı, aşağıdaki JavaScript özellikleri ve yöntemlerini denetler:

• window.status

• window.document.title

• window.location

• window.blur()

• window.close()

• window.focus()

• window.moveBy()

• window.moveTo()

• window.open()

• window.resizeBy()

• window.resizeTo()

new HTMLLoader() kullanarak bir HTMLLoader nesnesi oluşturduğunuzda, listelenen JavaScript özellikleri ve

yöntemleri etkinleştirilmez. HTMLHost sınıfı, bu JavaScript API'lerinin varsayılan, tarayıcı benzeri bir uygulamasını

sağlar. Davranışı özelleştirmek için ayrıca HTMLHost sınıfını genişletebilirsiniz. Varsayılan davranışı destekleyen bir

HTMLHost nesnesi oluşturmak için HTMLHost yapıcısındaki defaultBehaviors parametresini true olarak

ayarlayın:

var defaultHost:HTMLHost = new HTMLHost(true);

AIR'de HTMLLoader sınıfının createRootWindow() yöntemiyle bir HTML penceresi oluşturduğunuzda, varsayılan

davranışları destekleyen bir HTMLHost örneği otomatik olarak atanır. HTMLLoader nesnesinin htmlHost özelliğine

farklı bir HTMLHost uygulaması atayarak ana bilgisayar nesne davranışını değiştirebilir veya özellikleri tamamen

devre dışı bırakmak için null değerini atayabilirsiniz.

Not: AIR, HTML tabanlı bir AIR uygulaması için oluşturulan ilk pencereye ve JavaScript window.open() yönteminin

varsayılan uygulamasıyla oluşturulan tüm pencerelere varsayılan bir HTMLHost nesnesi atar.

Page 243: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

236ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

Örnek: HTMLHost sınıfını genişletme

Aşağıdaki örnek, HTMLHost sınıfının genişletilmesi yoluyla HTMLLoader nesnesinin kullanıcı arabirimini etkileme

biçiminin nasıl özelleştirildiğini gösterir:

1 AIR için bir Flash dosyası oluşturun. Bu dosyanın document sınıfını CustomHostExample olarak ayarlayın ve daha

sonra dosyayı CustomHostExample.fla olarak kaydedin.

2 HTMLHost sınıfını (alt sınıf) genişleten bir sınıf içeren CustomHost.as adlı bir ActionScript dosyası oluşturun. Bu

sınıf, kullanıcı arabirimi ilişkili ayarlardaki değişiklikleri işlemek için yeni sınıfın yöntemlerini geçersiz kılar.

Örneğin, aşağıdaki CustomHost sınıfı window.open() çağrılarına ilişkin davranışları tanımlar ve

window.document.title olarak değişir. window.open() yöntemine yapılan çağrılar HTML sayfasını yeni bir

pencerede açar ve bu pencerenin başlık window.document.title özelliğini (HTML sayfasının <title> öğesi

dahil) olarak ayarlamak üzere değiştirir.

package { import flash.display.StageScaleMode; import flash.display.NativeWindow; import flash.display.NativeWindowInitOptions; import flash.events.Event; import flash.events.NativeWindowBoundsEvent; import flash.geom.Rectangle; import flash.html.HTMLLoader; import flash.html.HTMLHost; import flash.html.HTMLWindowCreateOptions; import flash.text.TextField; public class CustomHost extends HTMLHost { public var statusField:TextField; public function CustomHost(defaultBehaviors:Boolean=true) { super(defaultBehaviors); } override public function windowClose():void { htmlLoader.stage.nativeWindow.close(); } override public function createWindow( windowCreateOptions:HTMLWindowCreateOptions ):HTMLLoader { var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions(); var bounds:Rectangle = new Rectangle(windowCreateOptions.x, windowCreateOptions.y, windowCreateOptions.width, windowCreateOptions.height); var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, windowCreateOptions.scrollBarsVisible, bounds); htmlControl.htmlHost = new HTMLHostImplementation(); if(windowCreateOptions.fullscreen){ htmlControl.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; } return htmlControl; }

Page 244: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

237ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

override public function updateLocation(locationURL:String):void { trace(locationURL); } override public function set windowRect(value:Rectangle):void { htmlLoader.stage.nativeWindow.bounds = value; } override public function updateStatus(status:String):void { statusField.text = status; trace(status); } override public function updateTitle(title:String):void { htmlLoader.stage.nativeWindow.title = title + "- Example Application"; } override public function windowBlur():void { htmlLoader.alpha = 0.5; } override public function windowFocus():void { htmlLoader.alpha = 1; } } }

3 Uygulamaya ilişkin document sınıfını içerecek CustomHostExample.as adlı başka bir ActionScript dosyası

oluşturun. Bu sınıf HTMLLoader nesnesini oluşturur ve bu nesnenin host özelliğini önceki adımda tanımlanan

CustomHost sınıfı örneğine ayarlar:

Page 245: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

238ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

package { import flash.display.Sprite; import flash.html.HTMLLoader; import flash.net.URLRequest; import flash.text.TextField; public class CustomHostExample extends Sprite { function CustomHostExample():void { var html:HTMLLoader = new HTMLLoader(); html.width = 550; html.height = 380; var host:CustomHost = new CustomHost(); html.htmlHost = host; var urlReq:URLRequest = new URLRequest("Test.html"); html.load(urlReq); addChild(html); var statusTxt:TextField = new TextField(); statusTxt.y = 380; statusTxt.height = 20; statusTxt.width = 550; statusTxt.background = true; statusTxt.backgroundColor = 0xEEEEEEEE; addChild(statusTxt); host.statusField = statusTxt; } } }

Burada açıklanan kodu test etmek için, aşağıdaki içeriğe sahip bir HTML dosyasını uygulama dizinine dahil edin:

Page 246: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

239ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

<html> <head> <title>Test</title> <script> function openWindow() { document.title = "Test" window.open('Test.html'); } </script> </head> <body bgColor="#EEEEEE"> <a href="#" onclick="window.open('Test.html')">window.open('Test.html')</a> <br/><a href="#" onclick="window.document.location='http://www.adobe.com'"> window.document.location = 'http://www.adobe.com'</a> <br/><a href="#" onclick="window.moveBy(6, 12)">moveBy(6, 12)</a> <br/><a href="#" onclick="window.close()">window.close()</a> <br/><a href="#" onclick="window.blur()">window.blur()</a> <br/><a href="#" onclick="window.focus()">window.focus()</a> <br/><a href="#" onclick="window.status = new Date().toString()">window.status=new Date().toString()</a> </body> </html>

Window.location özelliğindeki değişiklikleri işleme

HTML sayfasının URL'sindeki değişiklikleri işlemek için locationChange() yöntemini geçersiz kılın. Bir sayfadaki

JavaScript window.location değerini değiştirdiğinde locationChange() yöntemi çağrılır. Aşağıdaki örnek istenen

URL'yi yükler:

override public function updateLocation(locationURL:String):void { htmlLoader.load(new URLRequest(locationURL)); }

Not: Geçerli HTMLLoader nesnesine başvurmak için HTMLHost nesnesinin htmlLoader özelliğini kullanabilirsiniz.

window.moveBy(), window.moveTo(), window.resizeTo(), window.resizeBy()

için JavaScript çağrılarını işleme

HTML içeriğinin sınırlarındaki değişiklikleri işlemek için set windowRect() yöntemini geçersiz kılın. Bir sayfadaki

JavaScript window.moveBy(), window.moveTo(), window.resizeTo(), or window.resizeBy() çağırdığında, set

windowRect() yöntemi çağrılır. Aşağıdaki örnek, masaüstü penceresinin sınırlarını günceller:

override public function set windowRect(value:Rectangle):void { htmlLoader.stage.nativeWindow.bounds = value; }

window.open() için JavaScript çağrılarını işleme

window.open() için JavaScript çağrılarını işlemek üzere createWindow() yöntemini geçersiz kılın. createWindow()

yöntemi uygulamaları, yeni bir HTMLLoader nesnesi oluşturmak ve döndürmekle sorumludur. HTMLLoader

nesnesini genellikle yeni bir pencerede görüntülersiniz, ancak pencere oluşturma zorunlu değildir.

Page 247: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

240ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

Aşağıdaki örnek, window ve HTMLLoader nesnesi oluşturmak için HTMLLoader.createRootWindow() kullanan

createWindow() işlevinin nasıl uygulanacağını gösterir. Buna ek olarak, bir NativeWindow nesnesini ayrıca

oluşturabilir ve HTMLLoader nesnesini pencere sahnesine ekleyebilirsiniz.

override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader{ var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions(); var bounds:Rectangle = new Rectangle(windowCreateOptions.x, windowCreateOptions.y, windowCreateOptions.width, windowCreateOptions.height); var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, windowCreateOptions.scrollBarsVisible, bounds); htmlControl.htmlHost = new HTMLHostImplementation(); if(windowCreateOptions.fullscreen){ htmlControl.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; } return htmlControl; }

Not: Bu örnek, window.open() ile oluşturulan tüm yeni pencerelere özel HTMLHost uygulamasını atar. Ayrıca farklı

bir uygulama kullanabilir veya istediğinizde yeni pencereler için htmlHost özelliğini null değerine ayarlayabilirsiniz.

Parametre olarak createWindow() yöntemine iletilen nesne, bir HTMLWindowCreateOptions nesnesidir.

HTMLWindowCreateOptions sınıfı, window.open() çağrısındaki features parametre dizesinde değerleri bildiren

özellikleri içerir:

HTMLLoader sınıfı, özellik dizesinde belirtilebilecek tüm özellikleri uygulamaz. Uygulamanız gerektiğinde kaydırma

çubukları, konum çubukları, menü çubukları, durum çubukları ve araç çubukları sağlamalıdır.

JavaScript window.open() yöntemine ilişkin diğer argümanlar sistem tarafından işlenir. createWindow()

uygulaması, HTMLLoader nesnesine içerik yükleyemez veya pencere başlığını ayarlayamaz.

window.close() için JavaScript çağrılarını işleme

Window.close() yöntemine JavaScript çağrılarını işlemek için windowClose() yöntemini geçersiz kılın. Aşağıdaki

örnek, window.close() yöntemi çağrıldığında masaüstü penceresini kapatır:

HTMLWindowCreateOptions özelliği window.open() JavaScript çağrısındaki features dizesinde

karşılık gelen ayar

fullscreen tam ekran

height yükseklik

locationBarVisible konum

menuBarVisible menü çubu�u

resizeable yeniden boyutlandırılabilir

scrollBarsVisible kaydırma çubukları

statusBarVisible durum

toolBarVisible araç çubu�u

width geni�lik

x sol veya screenX

y üst veya screenY

Page 248: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

241ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

override public function windowClose():void {

htmlLoader.stage.nativeWindow.close(); }

window.close() için JavaScript çağrılarının var olan pencereyi kapatması gerekmez. Örneğin, aşağıdaki örnekte

olduğu gibi pencereyi (başka bir içeriğe sahip olabilir) açık bırakarak görüntü listesinden HTMLLoader nesnesini

kaldırabilirsiniz:

override public function windowClose():void {

htmlLoader.parent.removeChild(htmlLoader); }

window.status özelliğindeki değişiklikleri işleme

window.status değerindeki JavaScript değişikliklerini işlemek için updateStatus() yöntemini geçersiz kılın.

Aşağıdaki örnek durum değerini izler:

override public function updateStatus(status:String):void { trace(status); }

İstenen durum dize olarak updateStatus() yöntemine iletilir.

HTMLLoader nesnesi durum çubuğu sağlamaz.

window.document.title özelliğindeki değişiklikleri işleme

window.document.title değerindeki JavaScript değişikliklerini işlemek için updateTitle() yöntemini geçersiz

kılın. Aşağıdaki örnek, pencere başlığını değiştirir ve başlığa "Örnek," dizesini ekler:

override public function updateTitle(title:String):void { htmlLoader.stage.nativeWindow.title = title + " - Sample"; }

HTML sayfasında document.title ayarlandığında, istenen başlık dize olarak updateTitle() yöntemine iletilir.

document.title öğesindeki değişiklikler, HTMLLoader nesnesini içeren pencerenin başlığını değiştirmek zorunda

değildir. Örneğin metin alanı gibi başka bir arabirim öğesini değiştirebilirsiniz.

window.blur() ve window.focus() için JavaScript çağrılarını işleme

Aşağıdaki örnekte gösterildiği gibi window.blur() ve window.focus() için JavaScript çağrılarını işlemek için

windowBlur() ve windowFocus() yöntemlerini geçersiz kılın:

override public function windowBlur():void { htmlLoader.alpha = 0.5; } override public function windowFocus():void { htmlLoader.alpha = 1.0; NativeApplication.nativeApplication.activate(htmlLoader.stage.nativeWindow); }

Page 249: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

242ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

Not: AIR, bir pencerenin veya bir uygulamanın devre dışı bırakılması için API sağlamaz.

HTML içeriğini kaydırarak pencereler oluşturma

HTMLLoader sınıfı, bir HTMLLoader nesnesi içeren ve bu pencere için bazı kullanıcı arabirimi ayarları tanımlayan

yeni bir pencere (bir NativeWindow nesnesi tarafından temsil edilen) açmanızı sağlayan,

HTMLLoader.createRootWindow() adında statik bir yöntem içerir. Bu yöntem, kullanıcı arabirimini tanımlamanızı

sağlayan dört parametre içerir:

Örneğin, aşağıdaki kod kaydırma çubukları kullanan HTMLLoader içeriğine sahip bir pencere oluşturmak için

HTMLLoader.createRootWindow() yöntemini kullanır:

var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions(); var bounds:Rectangle = new Rectangle(10, 10, 600, 400); var html2:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, true, bounds); var urlReq2:URLRequest = new URLRequest("http://www.example.com"); html2.load(urlReq2); html2.stage.nativeWindow.activate();

Not: Doğrudan JavaScript içinde createRootWindow() çağrılarak oluşturulan pencereler açılan HTML penceresinden

bağımsız kalır. Örneğin, JavaScript Window opener ve parent özellikleri null değerindedir. Ancak,

createRootWindow() yöntemini dolaylı olarak createRootWindow() çağıran createWindow() yöntemini geçersiz

kılarak çağırırsanız, opener ve parent açılan HTML penceresine başvurur.

HTMLLoader sınıfının alt sınıflarını oluşturma

Yeni davranışlar oluşturmak için, HTMLLoader sınıfının alt sınıflarını oluşturabilirsiniz. Örneğin, HTMLLoader

olayları için varsayılan olay dinleyicilerini tanımlayan bir alt sınıf oluşturabilirsiniz (HTML oluşturulduğunda veya

kullanıcı bir linki tıklattığında gönderilen olaylar gibi).

Aşağıdaki örnek, JavaScript window.open() yöntemi çağrıldığında normal davranış sağlamak için HTMLHost

sınıfını genişletir. Örnek daha sonra özel HTMLHost uygulama sınıfını kullanan bir HTMLLoader alt sınıfı tanımlar:

Parametre Açıklama

visible Pencerenin başlangıçta görünür olup olmadığını belirten bir Boolean değeri (true veya false).

windowInitOptions NativeWindowInitOptions nesnesi. NativeWindowInitOptions sınıfı, NativeWindow nesnesi için aşağıdaki

başlatma seçeneklerini tanımlar: pencerenin küçültülebilir, büyütülebilir veya yeniden boyutlandırılabilir olup

olmadığı, pencerenin sistem kromu veya özel krom içerdiği, pencerenin şeffaf olup olmadığı (sistem kromu

kullanmayan pencereler için) ve pencerenin türü.

scrollBarsVisible Kaydırma çubuklarının olup olmadığı (true veya false).

bounds Yeni pencerenin konumunu ve boyutunu tanımlayan bir Rectangle nesnesi.

Page 250: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

243ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

HTML Kabı için Komut Dosyası Oluşturma

package { import flash.html.HTMLLoader; public class MyHTMLHost extends HTMLHost { public function MyHTMLHost() { super(false); } override public function createWindow(opts:HTMLWindowCreateOptions):void { var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions(); var bounds:Rectangle = new Rectangle(opts.x, opts.y, opts.width, opts.height); var html:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, opts.scrollBarsVisible, bounds); html.stage.nativeWindow.orderToFront(); return html } }

Aşağıdaki örnek, htmlHost özelliğine bir MyHTMLHost nesnesi atayan HTMLLoader sınıfının alt sınıfını tanımlar:

package { import flash.html.HTMLLoader; import MyHTMLHost; import HTMLLoader; public class MyHTML extends HTMLLoader { public function MyHTML() { super(); htmlHost = new MyHTMLHost(); } } }

Bu örnekte kullanılan HTMLHost sınıfı ve HTMLLoader.createRootWindow() yöntemine ilişkin ayrıntılar için bkz.

“HTML içeriği için tarayıcı benzeri kullanıcı arabirimleri tanımlama” sayfa 235.

Page 251: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

244

Bölüm 24: PDF içeriği ekleme

Adobe® AIR™'de çalışan uygulamalar yalnızca SWF ve HTML içeriği değil, PDF içeriği de oluşturabilir. AIR

uygulamaları, HTMLLoader sınıfını, WebKit motorunu ve Adobe® Reader® tarayıcı eklentisini kullanarak PDF içeriği

oluşturur. AIR uygulamasında, PDF içeriği uygulamanızın tam yükseklik ve genişliğine göre veya alternatif olarak

arabiriminin bir parçası olarak uzayabilir. Adobe Reader tarayıcı eklentisi PDF dosyasının AIR uygulamasındaki

görüntüsünü kontrol eder, böylece Reader araç çubuğu arabiriminde yapılan değişiklikler (konum, tutturma ve

görünürlük gibi) PDF dosyalarının AIR uygulamalarında ve tarayıcıda daha sonra görüntülenmesi için kalıcı duruma

gelir.

Önemli: Kullanıcı, AIR'de PDF içeriği oluşturmak için Adobe Reader ya da Adobe® Acrobat® 8.1 veya daha yeni bir

sürümü yüklemiş olmalıdır.

PDF Özelliklerini Saptama

Kullanıcı Adobe Reader veya Adobe Acrobat 8.1 ya da daha yeni bir sürüme sahip değilse, PDF içeriği AIR

uygulamasında görüntülenmez. Kullanıcının PDF içeriği oluşturup oluşturamayacağını saptamak için ilk önce

HTMLLoader.pdfCapability özelliğini kontrol edin. Bu özellik HTMLPDFCapability sınıfının aşağıdaki

sabitlerinden biri olarak ayarlanır:

Not: Windows'ta, kullanıcının sisteminde Adobe Acrobat veya Adobe Reader 7.x ya da daha yeni bir sürüm

çalışmaktaysa, PDF yüklemeyi destekleyen daha yeni bir sürüm yüklenmiş olsa bile bu sürüm kullanılır. Bu durumda,

pdfCampability özelliğinin değeri HTMLPDFCapability.STATUS_OK ise, AIR uygulaması PDF içeriğini yüklemeye

çalışığında daha eski Acrobat veya Reader sürümü bir uyarı görüntüler (ve AIR uygulamasında istisna atılmaz). Bu son

kullanıcılarınız için olası bir durumsa, onlara uygulamanızı çalıştırdıkları sırada Acrobat'ı kapatmalarına ilişkin

talimatlar vermeyi deneyebilirsiniz. PDF içeriği kabul edilebilir bir zaman diliminde yüklenmiyorsa, bu talimatları

görüntülemek isteyebilirsiniz.

Aşağıdaki kod, kullanıcının PDF içeriğini bir AIR uygulamasıda görüntüleyip görüntüleyemeyeceğini belirtir. Eğer

görüntüleyemiyorsa, HTMLPDFCapability hata nesnesine karşılık gelen hata kodunu izler:

Sabit Açıklama

HTMLPDFCapability.STATUS_OK Yeterli bir Adobe Reader sürümü (8.1 veya daha yeni) saptandı ve

PDF içeriği bir HTMLLoader nesnesine yüklenebilir.

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND Herhangi bir Adobe Reader sürümü saptanmadı. Bir HTMLLoader

nesnesi PDF içeriğini görüntüleyemez.

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD Adobe Reader saptandı, ancak sürüm çok eski. Bir HTMLControl

nesnesi PDF içeriğini görüntüleyemez.

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD Yeterli bir Adobe Reader sürümü (8.1 veya daha yeni) saptandı, ancak

Adobe Reader'ın PDF içeriğini işlemek üzere ayarlanan sürümü

Reader 8.1'den eski. Bir HTMLConrol nesnesi PDF içeriğini

görüntüleyemez.

Page 252: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

245ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

PDF içeriği ekleme

if(HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK) { trace("PDF content can be displayed"); } else { trace("PDF cannot be displayed. Error code:", HTMLLoader.pdfCapability); }

PDF içeriğini yükleme

Bir HTMLLoader örneği oluşturarak, bu örneğin boyutlarını ayarlayarak ve PDF yolunu yükleyerek AIR

uygulamasına bir PDF ekleyebilirsiniz.

Aşağıdaki örnek, harici bir siteden PDF yükler. URLRequest öğesini kullanılabilir harici bir PDF'e giden yolla

değiştirin.

var request:URLRequest = new URLRequest("http://www.example.com/test.pdf"); pdf = new HTMLLoader(); pdf.height = 800; pdf.width = 600; pdf.load(request); container.addChild(pdf);

app ve app-storage gibi dosya URL'leri ve AIR'e özgü URL şemalarından da içerik yükleyebilirsiniz. Örneğin, aşağıdaki

kod uygulama dizininin PDF alt dizinindeki test.pdf dosyasını yükler:

app:/js_api_reference.pdf

AIR URL şemaları hakkında daha fazla bilgi için bkz. “URL'lerde AIR URL şemalarını kullanma” sayfa 271.

Komut dosyası PDF içeriği

PDF içeriğini tarayıcıdaki web sayfasındaki gibi kontrol etmek için JavaScript'i kullanabilirsiniz.

Acrobat'a ilişkin JavaScript geliştirmeleri aşağıdaki ek özellikleri sunar:

• Sayfa gezinmesini denetleme ve büyütme

• Belge içinde formları işleme

• Multimedya olaylarını denetleme

Adobe Acrobat'a yönelik JavaScript geliştirmelerine ilişkin tüm ayrıntılar

http://www.adobe.com/devnet/acrobat/javascript.html linklerindeki Adobe Acrobat Geliştirici Bağlantısı'nda

sunulmuştur.

HTML-PDF iletişim temelleri

HTML sayfasındaki JavaScript, PDF içeriğini temsil eden DOM nesnesinin postMessage() yöntemini çağırarak PDF

içeriğindeki JavaScript'e mesaj gönderebilir. Örneğin, aşağıdaki gömülü PDF içeriğini dikkate alın:

<object id="PDFObj" data="test.pdf" type="application/pdf" width="100%" height="100%"/>

Mevcut HTML içeriğinde aşağıdaki JavaScript kodu, PDF dosyasındaki JavaScript'e bir mesaj gönderir:

Page 253: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

246ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

PDF içeriği ekleme

pdfObject = document.getElementById("PDFObj"); pdfObject.postMessage(["testMsg", "hello"]);

PDF dosyası, bu mesajın alınması için JavaScript'i dahil edebilir. Belge, klasör, sayfa, alan düzeyi ve toplu düzey

bağlamları dahil bazı bağlamlardaki PDF dosyalarına JavaScript kodu ekleyebilirsiniz. Burada yalnızca, PDF

dokümanı açıldığında değerlendirilen komut dosyalarını tanımlayan belge düzeyi bağlamı tartışılır.

PDF dosyası hostContainer nesnesine messageHandler özelliğini ekleyebilir. messageHandler özelliği, mesajları

yanıtlamak için işleyici işlevlerini tanımlayan bir nesnedir. Örneğin aşağıdaki kod, PDF dosyası tarafından ana

bilgisayar konteynerinden (PDF dosyasını içeren HTML içeriği) alınan mesajları işlemeye yönelik işlevi tanımlar:

this.hostContainer.messageHandler = {onMessage: myOnMessage}; function myOnMessage(aMessage) { if(aMessage[0] == "testMsg") { app.alert("Test message: " + aMessage[1]); } else { app.alert("Error"); } }

HTML sayfasındaki JavaScript kodu, sayfada yer alan PDF nesnesinin postMessage() yöntemini çağırabilir. Bu

yöntemin çağrılması, PDF dosyasındaki belge düzeyinde JavaScript'e bir mesaj ("HTML'den Merhaba") gönderir:

<html> <head> <title>PDF Test</title> <script> function init() { pdfObject = document.getElementById("PDFObj"); try { pdfObject.postMessage(["alert", "Hello from HTML"]); } catch (e) { alert( "Error: \n name = " + e.name + "\n message = " + e.message ); } } </script> </head> <body onload='init()'> <object id="PDFObj" data="test.pdf" type="application/pdf" width="100%" height="100%"/> </body> </html>

Daha gelişmiş bir örnek ve JavaScript'e PDF dosyası eklemek üzere Acrobat 8 kullanmaya ilişkin bilgi için bkz. Adobe

AIR'de PDF içeriği için çapraz komut dosyası.

Page 254: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

247ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

PDF içeriği ekleme

ActionScript'ten PDF içeriği için komut dosyası

ActionScript kodu (SWF içeriğindeki), PDF içeriğindeki JavaScript ile doğrudan iletişim kuramaz. Ancak,

ActionScript PSD içeriğini yükleyen bir HTMLLoader nesnesinde yüklenen HTML sayfasındaki JavaScript ile iletişim

kurabilir ve bu JavaScript kodu, yüklenen PDF sayfasındaki JavaScript ile iletişim kurabilir. Daha fazla bilgi için bkz.

“HTML ve JavaScript'te programlama” sayfa 206.

AIR'de PDF içeriği için bilinen sınırlamalar

Adobe AIR'deki PDF içeriği aşağıdaki sınırlamaları içerir:

• PDF içeriği saydam (transparent özelliğinin true olarak ayarlandığı) bir pencerede (bir NativeWindow nesnesi)

görüntülenemez.

• Bir PDF dosyasının görüntü düzeni, AIR uygulamasındaki diğer display nesnelerinden farklı çalışır. PDF içeriği

HTML görüntü düzenine göre doğru biçimde kesilse de, her zaman AIR uygulamasının görüntü düzenindeki

içeriğin en üstünde bulunacaktır.

• PDF içeriği tam ekran modundaki bir pencerede görüntülenmez (Sahne displayState özelliği

StageDisplayState.FULL_SCREEN veya StageDisplayState.FULL_SCREEN_INTERACTIVE olarak

ayarlandığında).

• PDF dosyası içeren bir HTMLLoader nesnesinin görsel özellikleri değiştirilemez. HTMLLoader nesnesinin

filters, alpha, rotation veya scaling özelliğinin değiştirilmesi, özellikler sıfırlanana kadar PDF dosyasını

görünmez duruma getirir. Bu durum, HTMLLoader nesnesi içeren display nesne konteynerlerinin özelliklerini

değiştirdiğinizde de geçerlidir.

• PDF içeriğine sahip NativeWindow nesnesine ait Stage nesnesinin scaleMode özelliği

StageScaleMode.NO_SCALE olarak ayarlanmalıdır.

• PDF dosyası içindeki içerik linklerinin tıklatılması, PDF içeriğinin kaydırma konumunu günceller. PDF dosyasının

dışındaki içerik linklerinin tıklatılması, PDF içeren HTMLLoader nesnesini yeniden yönlendirir (linkin hedefi yeni

bir pencere olsa da).

• PDF yorum oluşturma iş akışları, AIR 1.0'da çalışmaz.

Page 255: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

248

Bölüm 25: Dijital haklar yönetimini kullanma

Adobe® Flash® Media Rights Management Server (FMRMS), ortam yayıncılarına içeriği, özellikle FLV ve MP4

dosyalarını dağıtma ve kullanıcıları tarafından sağlanan doğrudan (kullanıcı tarafından ödenen) veya dolaylı (reklamla

ödenen) tazminatla üretim maliyetlerini telafi etme olanağı sağlar. Yayıncılar ortamı, Adobe® Media Player™

uygulamasında veya dijital haklar yönetimi (DRM) API'sini kullanan herhangi bir AIR uygulamasında indirilip

oynatılabilen şifreli FLV'ler olarak dağıtır.

İçerik sağlayıcıları FMRMS ile, içeriklerini kullanıcı kimlik bilgileriyle korumak için kimlik tabanlı lisans kullanabilir.

Örneğin bir tüketici televizyon programını izlemek istiyor, ancak beraberindeki reklamları izlemek istemiyor. Tüketici

reklamları izlememek için kaydolur ve içerik yayıncısına bir prim öder. Artık kullanıcı kimlik denetimi bilgilerini

kullanarak, reklamları izlemeden programa erişip programı oynatabilir. Bir başka tüketici de Internet erişimi olmadan

seyahat ederken içeriği çevrimdışı görüntülemek isteyebilir. Kullanıcı kaydolduktan ve içerik yayıncısına öncelikli

hizmet için ödeme yaptıktan sonra, kimlik denetimi bilgileriyle yayıncının web sitesindeki programlara erişip bunları

indirebilir. Böylece kullanıcı, izin verilen süre boyunca içeriği çevrimdışı görüntüleyebilir. İçerik ayrıca kullanıcı

kimlik bilgileriyle korunur ve başka kullanıcılarla paylaşılamaz.

Bir kullanıcı DRM şifreli dosyayı oynatmayı denediğinde, uygulama FMRMS ile iletişime geçer, FMRMS de

kullanıcının kimliğini denetlemek ve lisans almak için hizmet sağlayıcı arabirimi (SPI) üzerinden içerik yayıncısının

sistemiyle iletişime geçer, lisans kullanıcının içeriği erişimi olup olmadığını ve varsa da ne kadar süreyle olduğunu

belirleyen bir makbuzdur. Makbuz ayrıca kullanıcının içeriğe çevrimdışı erişimi olup olmadığını ve varsa ne kadar

süreyle olduğunu da belirler. Bu gibi durumlarda, şifreli içeriğe erişim durumunu belirlemek için kullanıcı kimlik

bilgilerine ihtiyaç duyulur.

Kimlik tabanlı lisans da adsız erişimi destekler. Örneğin adsız erişim sağlayıcı tarafından reklam destekli içeriği

dağıtmak veya geçerli içeriğe belirli bir gün sayısı boyunca ücretsiz erişim vermek için kullanılabilir. Arşiv

malzemeleri, karşılığında ödeme yapılması gereken öncelikli içerik kapsamına giriyor olabilir ve kullanıcı kimlik

bilgileri gerekir. Ayrıca, içerik sağlayıcı, içeriği için gerekli olan oynatıcının türünü ve sürümünü belirtebilir ve

sınırlayabilir.

AIR uygulamanızın dijital haklar yönetimi şifrelemesiyle korunan içeriği oynatmasını nasıl sağlayacağınız burada

anlatılmaktadır. İçeriği DRM kullanarak nasıl şifreleyeceğini anlamanız gerekli değildir, ancak DRM şifreli içeriğe

erişiminiz olduğu ve kullanıcının kimliğini denetlemek ve makbuzu almak için FMRMS ile iletişim kurduğunuz

varsayılır.

Politika oluşturmak da dahil olmak üzere FMRMS'ye genel bakış için, FMRMS'nin beraberindeki belgelere bakın.

Adobe Media Player hakkında bilgi için bkz. Adobe Media Player içinde Adobe Media Player Yardımı.

Dijital haklar yönetimiyle ilgili ek çevrimiçi bilgiler

Bu kaynaklardan dijital haklar yönetimi hakkında daha fazla bilgi edinebilirsiniz:

Dil Başvurusu

• DRMAuthenticateEvent

• DRMErrorEvent

Page 256: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

249ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

• DRMStatusEvent

• NetStream

Adobe Geliştirici Bağlantısı Makaleler ve Örnekler

• Flash için Adobe AIR Geliştirici Bağlantısı ('dijital haklar yönetimi'ni veya 'drm'yi arayın)

Şifreli FLV iş akışını anlama

AIR uygulaması DRM şifreli bir dosyayı oynatma girişiminde bulunduğunda gönderilebilen dört olay tipi vardır:

StatusEvent, DRMAuthenticateEvent, DRMErrorEvent ve DRMStatusEvent. Bu dosyaları desteklemek için uygulama

DRM olaylarını işleme için olay dinleyicileri eklemelidir.

Aşağıda, AIR uygulamasının DRM şifrelemeyle korunan içeriği nasıl aldığına ve oynattığına ilişkin bir iş akışı

bulunmaktadır:

1 NetStream nesnesi kullanan Uygulama, bir FLV veya MP4 dosyasını oynatma girişiminde bulunur. İçerik şifreliyse,

FLV'nin şifreli olduğunu belirten DRM.encryptedFLV koduna sahip bir events.StatusEvent olayı gönderilir.

Not: Bir uygulama DRM şifreli dosyayı oynatmak istemezse, şifreli içerikle karşılaştığında gönderilen status olayını

dinleyebilir ve ardından kullanıcıya dosyanın desteklenmediğini bildirip bağlantıyı kapatabilir.

2 Dosya tüm kullanıcıların içeriği kimlik denetim bilgilerini girmeden görüntüleyebileceği şekilde adsız olarak

şifrelenmişse, AIR uygulaması bu iş akışının son adımına geçer. Ancak dosya, kullanıcı kimlik bilgilerinin gerekli

olduğu kimlik tabanlı bir lisans isterse, NetStream nesnesi bir DRMAuthenticateEvent olay nesnesi oluşturur.

Oynatmanın başlayabilmesi için kullanıcının kimlik denetimi bilgilerini sağlaması gerekir.

3 AIR uygulaması, gerekli kimlik denetimi bilgilerinin toplanması için bazı mekanizmalar sağlamalıdır.

DRMAuthenticationEvent sınıfının içerik sunucusu tarafından sağlanan usernamePrompt, passwordPrompt ve

urlPrompt özellikleri, son kullanıcıyı hangi verilerin gerekli olduğu konusunda yönlendirmek için kullanılabilir.

Bu özellikleri, gerekli kullanıcı kimlik bilgilerini almak için bir kullanıcı arabirimi oluştururken kullanabilirsiniz.

Örneğin usernamePrompt değer dizesi, kullanıcı adının e-posta adresi biçiminde olması gerektiğini bildirebilir.

Not: AIR, kimlik denetimi bilgilerini toplamak için varsayılan bir kullanıcı arabirimi sağlamaz. Uygulama geliştirici,

kullanıcı arabirimini yazmalı ve DRMAuthenticateEvent olaylarını işlemelidir. Uygulama DRMAuthenticateEvent

nesneleri için bir olay dinleyicisi sağlamazsa, DRM şifreli nesne "waiting for credentials“ (kimlik bilgileri bekleniyor)

durumunda kalır ve içerik kullanılamaz.

4 Uygulama kullanıcı kimlik bilgilerini aldıktan sonra, kimlik bilgilerini setDRMAuthenticationCredentials()

yöntemiyle NetStream nesnesine iletir. Bu, NetStream nesnesine, kullanıcının kimliğini bir sonraki fırsatta

denetlemesi gerektiği işaretini verir. Ardından AIR kimlik bilgilerini kimlik denetimi için FMRMS'ye iletir.

Kullanıcının kimlik denetimi başarılıysa, uygulama bir sonraki adıma geçer.

Kimlik denetimi başarısız olmuşsa, yeni bir DRMAuthenticateEvent olayı gönderilir ve uygulama adım 3'e döner.

Bu işlem süresiz olarak tekrarlanır. Uygulama, tekrarlanan kimlik denetleme girişimlerini işlemek ve sınırlamak

için bir mekanizma sağlamalıdır. Örneğin uygulama, kullanıcının, NetStream bağlantısını kapatabilen girişimi iptal

etmesine izin verebilir.

5 Kullanıcının kimliği doğrulandıktan sonra veya adsız şifreleme kullanılıyorsa, DRM alt sistemi makbuzu alır. Bu

makbuz, kullanıcının içeriği görüntüleme yetkisi olup olmadığını kontrol etmek için kullanılır. Makbuzdaki bilgiler

hem kimlik denetimi yapılmış hem de adsız kullanıcılar için geçerli olabilir. Örneğin hem kimlik denetimi yapılmış

hem de adsız kullanıcıların, içeriğin süresi dolmadan önce belirli bir süre içeriğe erişimi olabilir veya içerik

sağlayıcısı, görüntüleme uygulamasının sürümünü desteklemediği için içeriğe erişimleri olmayabilir.

Page 257: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

250ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

Bir hata oluşmadıysa ve kullanıcının içeriği görmek için kimlik denetimi yapılmışsa, DRMStatusEvent olay nesnesi

gönderilir ve AIR uygulaması oynatmayı başlatır. DRMStatusEvent nesnesi ilgili makbuz bilgilerini saklar, bu bilgiler

kullanıcı politika ve izinlerini tanımlar. Örneğin içeriğin, çevrimdışıyken veya makbuzun süresi dolduğunda ve içerik

artık görüntülenemediğinde kullanılabilir olup olamayacağına dair bilgileri saklar. Uygulama, kullanıcıya

politikasının durumunu bildirmek için bu bilgileri kullanabilir. Örneğin uygulama, kullanıcının içeriği görebileceği

kaç günü kaldığını bir durum çubuğunda gösterebilir.

Kullanıcıya çevrimdışı erişim verilirse, makbuz önbelleğe alınır, şifreli içerik kullanıcının bilgisayarına yüklenir ve

çevrimdışı kira süresinde belirtilen süre boyunca kullanılabilir olur. Olaydaki “detail” özelliği

“DRM.voucherObtained” öğesini içerir. Uygulama, çevrimdışıyken de erişebilmesi için içeriğin yerel olarak nerede

saklanacağına karar verir.

DRM'yle ilgili tüm hatalar, uygulamanın bir DRMErrorEvent olay nesnesi göndermesiyle sonuçlanır. AIR, DRM

kimlik denetimi başarısızlığını DRMAuthenticationEvent olay nesnesini yeniden başlatarak işler. Tüm diğer hata

olayları uygulama tarafından açık olarak işlenmelidir. Bunlar arasında, kullanıcının geçerli kimlik bilgilerini girdiği,

ancak makbuzun şifreli içeriği koruyarak içeriğe erişimi kısıtladığı durumlar da bulunmaktadır. Örneğin kimliği

denetlenmiş bir kullanıcının, haklar ödenmediği için içeriğe yine de erişimi olmayabilir. Bu durum ayrıca, aynı ortam

yayıncısının kayıtlı üyesi olan iki kullanıcı, yalnızca birinin ödemesini yaptığı içeriği paylaşma girişiminde bulunduğu

zaman da yaşanır. Uygulama kullanıcıyı içerik kısıtlamaları gibi hatalar hakkında uyarmalıdır, ayrıca içeriği görmek

için nasıl kaydolunacağına ve hakların ödemesinin nasıl yapılacağına ilişkin talimatlar gibi bir alternatif de

sağlamalıdır.

NetStream sınıfında değişiklikler

NetStream sınıfı, Flash Player veya bir AIR uygulamasıyla Flash Media Server veya yerel dosya sistemi arasında tek

yönlü bir akış sağlar. (NetStream sınıfı ayrıca aşamalı indirmeyi de destekler.) Bir NetStream nesnesi, NetConnection

nesnesinin içindeki kanaldır. AIR'in bir parçası olarak NetStream sınıfı, DRM'yle ilgili dört yeni olay da içerir:

NetStream sınıfı aşağıdaki DRM'ye özgü yöntemleri içerir:

Olay Açıklama

drmAuthenticate DRMAuthenticateEvent sınıfında tanımlı olan bu olay, bir NetStream nesnesi, oynatılması için kullanıcı kimlik

bilgilerinin kimlik denetiminden geçmesi gereken dijital haklar yönetimi (DRM) şifreli içeriğini oynatma

girişiminde bulunduğunda gönderilir.

Bu olayın özellikleri, kullanıcının kimlik bilgilerini almada ve ayarlamada kullanılabilen header,

usernamePrompt, passwordPrompt ve urlPrompt özelliklerini içerir. Bu olay, NetStream nesnesi geçerli

kullanıcı kimlik bilgilerini alana kadar tekrarlanır.

drmError Bu olay DRMErrorEvent sınıfında tanımlıdır ve dijital haklar yönetimi (DRM) şifreli dosyasını oynatmaya çalışan

bir NetStream nesnesi DRM'yle ilgili bir hatayla karşılaştığında gönderilir. Örneğin DRM error olayı nesnesi,

kullanıcı kimlik denetimi başarısız olduğunda gönderilir. Bunun nedeni kullanıcının içeriği görüntülemek için

gerekli olan hakları satın almamış olması veya içerik sağlayıcısının görüntüleme uygulamasını desteklememesi

olabilir.

drmStatus DRMStatusEvent sınıfında tanımlıdır ve dijital haklar yönetimi (DRM) şifreli içeriği oynatılmaya başladığında

(kullanıcının içeriği oynatmak için kimliği doğrulanmıştır ve yetkisi vardır) gönderilir. DRMStatusEvent nesnesi,

içeriğin çevrimdışıyken veya makbuzun süresi dolduğunda ve içerik artık görüntülenemediğinde kullanılabilir

olup olamayacağına dair bilgiler gibi makbuzla ilgili bilgiler içerir.

durum events.StatusEvent sınıfında tanımlıdır ve yalnızca uygulama dijital haklar yönetimiyle (DRM) şifrelenmiş

içeriği oynatma girişiminde bulunduğunda, NetStream.play() yöntemini çağırarak gönderilir. status kod

özelliği "DRM.encryptedFLV" şeklindedir.

Page 258: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

251ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

Aşağıdaki kodda kullanıcı adı (“administrator”), şifre (“password”) ve “drm” kimlik denetimi türü, kullanıcının

kimliğini denetlemek üzere ayarlanmıştır. setDRMAuthenticationCredentials() yöntemi, tedarik sağlayıcısı tarafından

bilinen ve kabul edilen (içeriğin görülmesi için izin alınmasını sağlayan aynı kullanıcı kimlik bilgileri) kimlik

bilgileriyle eşleşen kimlik bilgileri sağlamalıdır. Video oynatmaya ve video akışına başarılı bir bağlantı yapıldığını

doğrulamaya ilişkin kod burada yer almamaktadır.

var connection:NetConnection = new NetConnection(); connection.connect(null); var videoStream:NetStream = new NetStream(connection); videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, drmAuthenticateEventHandler) private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void { videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); } var connection:NetConnection = new air.NetConnection(); connection.connect(null); var videoStream= new air.NetStream(); videoStream.addEventListener(air.DRMAuthenticateEvent.DRM_AUTHENTICATE, drmAuthenticateEventHandler) function drmAuthenticateEventHandler(event) { videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); }

Yöntem Açıklama

resetDRMVouchers() Geçerli içerik için yerel olarak önbelleğe alınan tüm dijital haklar yönetimi (DRM) makbuz verilerini

siler. Kullanıcının şifreli içeriğe erişebilmesi için uygulamanın makbuzu yeniden indirmesi gerekir.

Örneğin aşağıdaki kod bir NetStream nesnesi için makbuzları kaldırır:

NetStream.resetDRMVouchers();

air.NetStream.resetDRMVouchers();

setDRMAuthenticationCredentials() Kimlik denetimi için NetStream nesnesine kullanıcı adı, şifre ve kimlik denetiminden oluşan bir

kimlik denetimi bilgileri kümesi iletir. Geçerli kimlik denetimi türleri "drm" ve "proxy"

türleridir. "drm" kimlik denetimi türüyle, sağlanan kimlik bilgileri FMRMS için doğrulanır.

"proxy" kimlik denetimi türüyle, kimlik bilgileri proxy sunucusu için doğrulanır ve bilgilerin

proxy sunucusu tarafından gerekli kılınanlarla eşleşmesi gerekir. Örneğin bir kuruluş kullanıcının

Internete erişebilmesi için böyle bir adım gerektirirse, proxy seçeneği uygulamanın bir proxy

sunucusu için kimlik denetimi yapmasına izin verir. Adsız kimlik denetimi kullanılmadığı sürece,

proxy kimlik denetiminden sonra kullanıcı yine de makbuzu almak ve içeriği oynatmak için FMRMS

için kimlik doğrulaması yapmalıdır. FMRMS için kimlik doğrulaması yapmak üzere

setDRMAuthenticationcredentials() öğesini "drm" seçeneğiyle ikinci kez kullanabilirsiniz.

Page 259: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

252ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

DRMStatusEvent sınıfını kullanma

Dijital haklar yönetimi (DRM) kullanılarak korunan içerik başarılı bir şekilde oynatılmaya başladığında (makbuz

doğrulandığında ve kullanıcının içeriği oynatmak için kimliği doğrulandığında ve yetkisi olduğunda), NetStream

nesnesi bir DRMStatusEvent nesnesi gönderir. DRMStatusEvent erişim izni olan adsız kullanıcılar için de gönderilir.

Makbuz, kimlik denetiminden geçmesi gerekmeyen adsız kullanıcının içeriği oynatmak için izni olup olmadığının

doğrulanması amacıyla kontrol edilir. Adsız kullanıcıların çeşitli nedenlerden ötürü erişimi olmayabilir. Örneğin adsız

bir kullanıcı içeriğe süresi dolduğu için erişemeyebilir.

DRMStatusEvent nesnesi, içeriğin çevrimdışıyken veya makbuzun süresi dolduğunda ve içerik artık

görüntülenemediğinde kullanılabilir olup olamayacağına dair bilgiler gibi makbuzla ilgili bilgiler içerir. Uygulama bu

verileri kullanıcının politika durumunu ve izinlerini taşımak için kullanabilir.

DRMStatusEvent özellikleri

DRMStatusEvent sınıfı aşağıdaki özellikleri içerir:

DRMStatusEvent işleyicisi oluşturma

Aşağıdaki örnek, olayı başlatan NetStream nesnesi için DRM içerik durumu bilgilerini çıkaran bir olay işleyicisi

oluşturur. Bu olay işleyicisini DRM şifreli içeriği işaret eden bir NetStream nesnesine ekleyin.

private function drmStatusEventHandler(event:DRMStatusEvent):void { trace(event.toString()); } function drmStatusEventHandler(event:DRMStatusEvent):void { trace(event.toString()); }

Özellik Açıklama

detail status olayının bağlamını açıklayan dize. DRM 1.0 sürümünde tek geçerli değer DRM.voucherObtained

değeridir.

isAnonymous DRM şifrelemeyle korunan içeriğin, bir kullanıcının kimlik denetimi bilgilerini sağlamasını gerektirmeden

kullanılabilir (true) veya kullanılamaz (false) olduğunu belirtir. false değeri, kullanıcının, içerik sağlayıcı

tarafından bilinen ve beklenen kullanıcı adı ve şifreyle eşleşen bir kullanıcı adı ve şifre sağlaması gerektiği

anlamına gelir.

isAvailableOffline DRM şifrelemeyle korunan içeriğin çevrimdışıyken kullanılabilir (true) veya kullanılamaz (false) olduğunu

belirtir. Dijital olarak korunan içeriğin çevrimdışıyken kullanılabilir olması için, makbuzunun kullanıcının yerel

bilgisayarında önbelleğe alınmış olması gerekir.

offlineLeasePeriod İçeriğin çevrimdışıyken görüntülenebileceği kalan gün sayısı.

policies Özel DRM özellikleri içerebilen özel nesne.

voucherEndDate Makbuzun süresinin dolduğu ve içeriğin artık görüntülenemediği mutlak tarih.

Page 260: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

253ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

DRMAuthenticateEvent sınıfını kullanma

DRMAuthenticateEvent nesnesi, bir NetStream nesnesi oynatılması için kullanıcı kimlik bilgilerinin kimlik

denetiminden geçmesi gereken dijital haklar yönetimi (DRM) şifreli içeriğini oynatma girişiminde bulunduğunda

gönderilir.

DRMAuthenticateEvent işleyicisi gerekli kimlik bilgilerini (kullanıcı adı, şifre ve tür) toplamaktan ve değerleri

doğrulama için NetStream.setDRMAuthenticationCredentials() yöntemine iletmekten sorumludur. Her AIR

uygulaması kullanıcı kimlik belgelerini edinmek için bazı mekanizmalar sağlamalıdır. Örneğin uygulama kullanıcıya

kullanıcı adı ve şifre değerlerini, isteğe bağlı olarak da tür değerini girmesi için basit bir kullanıcı arabirimi sağlayabilir.

AIR uygulaması ayrıca tekrarlanan kimlik denetimi girişimlerinin işlenmesi ve sınırlanması için de bir mekanizma

sağlamalıdır.

DRMAuthenticateEvent özellikleri

DRMAuthenticateEvent sınıfı aşağıdaki özellikleri içerir:

DRMAuthenticateEvent işleyicisi oluşturma

Aşağıdaki örnek, olayı başlatan NetStream nesnesine kodlanmış kimlik denetimi bilgileri ileten bir olay işleyicisi

oluşturur. (Video oynatmaya ve video akışına başarılı bir bağlantı yapıldığını doğrulamaya ilişkin kod burada yer

almamaktadır.)

Özellik Açıklama

authenticationType Verilen kimlik bilgilerinin FMRMS için mi (“drm”) yoksa bir proxy sunucusu için (“proxy”) kimlik denetimi

yapmaya yönelik olduğunu belirtir. Örneğin bir kuruluş kullanıcının Internete erişebilmesi için böyle bir adım

gerektirirse, "proxy" seçeneği uygulamanın bir proxy sunucusu için kimlik denetimi yapmasına izin verir. Adsız

kimlik denetimi kullanılmadığı sürece, proxy kimlik denetiminden sonra kullanıcı yine de makbuzu almak ve

içeriği oynatmak için FMRMS için kimlik doğrulaması yapmalıdır. FMRMS için kimlik doğrulaması yapmak

üzere setDRMAuthenticationcredentials() öğesini "drm" seçeneğiyle ikinci kez kullanabilirsiniz.

header Sunucu tarafından sağlanan şifreli içerik dosya üstbilgisi. Şifreli içeriğin bağlamına ilişkin bilgi içerir.

netstream Bu olayı başlatan NetStream nesnesi.

passwordPrompt Sunucu tarafından sağlanan, şifre kimlik bilgisi istemi. Dize, istenilen şifre türü için talimat içerebilir.

urlPrompt Sunucu tarafından sağlanan, URL dizesi istemi. Dize, kullanıcı adı ve şifrenin gönderildiği konumu sağlayabilir.

usernamePrompt Sunucu tarafından sağlanan, kullanıcı adı kimlik bilgisi istemi. Dize, istenilen kullanıcı adı türü için talimat

içerebilir. Örneğin bir içerik sağlayıcısı, kullanıcı adı olarak e-posta adresi isteyebilir.

Page 261: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

254ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

var connection:NetConnection = new NetConnection(); connection.connect(null); var videoStream:NetStream = new NetStream(connection); videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, drmAuthenticateEventHandler) private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void { videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); } var connection:NetConnection = new air.NetConnection(); connection.connect(null); var videoStream= new air.NetStream(); videoStream.addEventListener(air.DRMAuthenticateEvent.DRM_AUTHENTICATE, drmAuthenticateEventHandler) function drmAuthenticateEventHandler(event) { videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); }

Kullanıcı kimlik bilgilerini almak için bir arabirim oluşturma

DRM içeriğinin kullanıcı kimlik bilgilerini gerektirdiği durumda, AIR uygulamasının kullanıcının kimlik denetimi

bilgilerini genellikle bir kullanıcı arabirimi üzerinden alması gerekir.

DRMErrorEvent sınıfını kullanma

Bir NetStream nesnesi dijital haklar yönetimiyle (DRM) şifrelenmiş dosyayı oynatmaya çalışırken DRM'yle ilgili bir

hatayla karşılaştığında, AIR bir DRMErrorEvent nesnesi gönderir. Geçersiz kullanıcı kimlik bilgileri durumunda

DRMAuthenticateEvent nesnesi, kullanıcı geçerli kimlik bilgilerini girene kadar sürekli gönderme işlemi yaparak

hatayı işler veya AIR uygulaması daha fazla girişime izin vermez. Uygulama DRM'yle ilgili hataları saptamak,

tanımlamak ve işlemek için tüm diğer DRM error olaylarını dinlemelidir.

Bir kullanıcı geçerli kimlik bilgileri girerse, DRM makbuzunun şartlarına bağlı olarak yine de şifreli içeriği görmesine

izin verilmeyebilir. Örneğin, kullanıcı içeriği yetkisiz, yani şifreli içeriğin yayıncısı tarafından doğrulanmamış bir

uygulamada görüntüleme girişiminde bulunuyorsa. Bu durumda bir DRMErrorEvent nesnesi gönderilir. İçerik

bozuksa veya uygulamanın sürümü makbuz tarafından belirtilenle eşleşmiyorsa, error olayları da çalıştırılabilir.

Uygulama hataların işlenmesi için uygun mekanizmayı sağlamalıdır.

DRMErrorEvent özellikleri

DRMErrorEvent sınıfı aşağıdaki özelliği içerir:

Aşağıdaki tablo, DRMErrorEvent nesnesinin bildirdiği hataları listeler:

subErrorID Altında yatan soruna ilişkin daha fazla bilgiyle beraber küçük hata kimliğini gösterir.

Page 262: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

255ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

Büyük Hata Kodu Küçük Hata Kodu Hata Ayrıntıları Açıklama

1001 0 Kullanıcı kimlik denetimi başarısız oldu.

1002 0 Flash Media Rights Management Server (FMRMS),

Secure Sockets Layer (SSL) protokolünü

desteklemiyor.

1003 0 İçeriğin süresi dolmuş ve artık görüntülenemiyor.

1004 0 Kullanıcı kimlik denetimi hatası. Örneğin kullanıcı

içeriği satın almamışsa ve görüntüleme hakkına

sahip değilse bu durum yaşanabilir.

1005 0 Server URL Sunucuya bağlanılamıyor.

1006 0 İstemci güncellemesi gerekli, yani Flash Media

Rights Management Server (FMRMS), yeni bir

dijital haklar yönetimi (DRM) motoru istiyor.

1007 0 Genel dahili hata.

1008 Ayrıntılı şifre çözme hata kodu

Yanlış lisans anahtarı.

1009 0 FLV içeriği bozuk.

1010 0 publisherID:applicationID Görüntüleme uygulamasının kimliği, içerik

yayıncısı tarafından desteklenen geçerli bir

kimlikle eşleşmiyor.

1011 0 Uygulama sürümü, politikada belirtilenlerle

eşleşmiyor.

1012 0 Şifreli içerikle ilişkilendirilen makbuzun

doğrulaması başarısız oldu, içerik bozuk olabilir.

1013 0 Şifreli içerikle ilişkilendirilen makbuz

kaydedilemedi.

1014 0 FLV üstbilgisinin bütünlüğü başarısız oldu, içerik

bozuk olabilir.

Büyük Hata Kodu Küçük Hata Kimliği Hata Ayrıntıları Açıklama

3300 Adobe Policy Server

hata kodu

Uygulama, içerikle ilişkilendirilen geçersiz bir

makbuz saptadı.

3301 0 Kullanıcı kimlik denetimi başarısız oldu.

3302 0 Secure Sockets Layer (SSL), Flash Media Rights

Management Server (FMRMS) tarafından

desteklenmiyor.

3303 0 İçeriğin süresi dolmuş ve artık görüntülenemiyor.

3304 0 Kullanıcı kimlik denetimi hatası. Bu durum,

örneğin kullanıcı içeriği görüntülemek için

gereken hakları satın almadıysa, kullanıcının

kimlik doğrulaması yapılmış olsa bile yaşanabilir.

3305 0 Server URL Sunucuya bağlanılamıyor.

3306 0 İstemci güncellemesi gerekli, yani Flash Media

Rights Management Server (FMRMS), yeni bir

dijital haklar yönetimi istemci motoru istiyor.

Page 263: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

256ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dijital haklar yönetimini kullanma

DRMErrorEvent işleyicisi oluşturma

Aşağıdaki örnek, olayı başlatan NetStream nesnesi için bir olay işleyicisi oluşturur. NetStream, DRM şifreli içeriği

oynatma girişiminde bulunurken bir hatayla karşılaşırsa çağrılır. Normalde bir uygulama hatayla karşılaştığında,

temizleme görevlerini gerçekleştirir, kullanıcıyı hata konusunda bilgilendirir ve sorunu çözmeye yönelik seçenekler

sunar.

private function drmErrorEventHandler(event:DRMErrorEvent):void { trace(event.toString()); } function drmErrorEventHandler(event) { air.trace(event.toString()); }

3307 0 Genel dahili dijital haklar yönetimi hatası.

3308 Ayrıntılı şifre çözme hata kodu

Yanlış lisans anahtarı.

3309 0 Flash video içeriği bozuk.

3310 0 publisherID:applicationID Görüntüleme uygulamasının kimliği, içerik

yayıncısı tarafından desteklenen geçerli bir

kimlikle eşleşmiyor. Başka türlü ifade etmek

gerekirse, görüntüleme uygulaması, içerik

sağlayıcısı tarafından desteklenmiyor.

3311 0 min=x:max=y Uygulama sürümü, makbuzda belirtilenlerle

eşleşmiyor.

3312 0 Şifreli içerikle ilişkilendirilen makbuzun

doğrulaması başarısız oldu, içerik bozuk olabilir.

3313 0 Şifreli içerikle ilişkilendirilen makbuz Microsafe'e

kaydedilemedi.

3314 0 FLV üstbilgisinin bütünlüğü başarısız oldu, içerik

bozuk olabilir.

3315 DRM korumalı içeriğin uzaktan oynatılmasına izin

verilmiyor.

Büyük Hata Kodu Küçük Hata Kimliği Hata Ayrıntıları Açıklama

Page 264: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

257

Bölüm 26: Uygulama başlatma ve uygulamadan çıkma seçenekleri

Bu bölüm, yüklenmiş bir Adobe® AIR™ uygulamasının başlatılmasına yönelik seçeneklerin ve etkenlerin yanı sıra, bir

uygulamanın kapatılmasına ve çalıştırılmasına yönelik seçenekleri ve etkenleri de tartışır.

Uygulama başlatma

AIR uygulaması, kullanıcı (veya işletim sistemi) aşağıdaki eylemlerde bulunduğunda çağrılır:

• Uygulamayı masaüstü kabuğundan başlatırsa.

• Uygulamayı komut satırı kabuğunda bir komut olarak kullanırsa.

• Uygulamanın varsayılan açılış uygulaması olduğu bir dosya türü açarsa.

• (Mac OS X) Sabitleme görev çubuğundaki uygulama simgesini tıklatırsa (uygulama o anda çalışır durumda olsun

veya olmasın).

• Uygulamayı yükleyiciden başlatmayı seçerse (yeni bir yükleme işleminin sonunda veya zaten yüklenmiş olan

uygulamanın AIR dosyasını çift tıklatarak).

• Yüklenen sürüm uygulama güncellemelerini kendisinin işlediğini bildirdiğinde bir AIR uygulaması güncellemesi

başlatırsa (uygulama tanımlayıcı dosyasına bir <customUpdateUI>true</customUpdateUI> bildirimi katarak).

• AIR uygulaması için tanımlayıcı bilgiler belirten com.adobe.air.AIR launchApplication() yöntemini çağıran

bir Flash kimlik kartı veya uygulamasını barındıran bir web sayfasını ziyaret ederse. (Uygulama tanımlayıcı ayrıca

tarayıcı başlatması için bir <allowBrowserInvocation>true</allowBrowserInvocation> bildirimi

içermelidir.) Bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma” sayfa 282.

Bir AIR uygulaması çağrıldığında, AIR, NativeApplication nesnesi yoluyla invoke türü bir InvokeEvent nesnesi

gönderir. Bir uygulama zamanının kendini başlatmasını ve olay dinleyicisini kaydetmesini sağlamak için, invoke

olayları atılmak yerine kuyruğa gönderilir. Bir dinleyici kaydedildiğinde sıradaki tüm olaylar iletilir.

Not: Bir uygulama tarayıcı başlatma özelliği kullanılarak çağrıldığında, uygulama zaten çalışır halde değilse

NativeApplication nesnesi yalnızca bir invoke olayı gönderir. Bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan

başlatma” sayfa 282.

invoke olaylarını almak için, NativeApplication nesnesinin

(NativeApplication.nativeApplication)addEventListener() yöntemini çağırın. Bir olay dinleyicisi invoke

olayı için kaydolduğunda, kayıttan önce gerçekleşen tüm invoke olaylarını da alır. Sıradaki invoke olayları,

addEventListener() yöntemine yapılan çağrı geri döndükten sonra kısa aralıklarla, bir kerede bir olay olmak üzere

gönderilir. Bu işlem sırasında yeni bir invoke olayı gerçekleşirse, bu olay sıradaki bir veya daha fazla olaydan önce

gönderilebilir. Bu olay sıralaması sayesinde, başlatma kodunuz çalışmadan önce gerçekleşen tüm invoke olaylarını

işleyebilirsiniz. Bir olay dinleyicisini çalışmaya sonradan ekleseniz de (uygulama başlatıldıktan sonra), uygulamanın

başlamasından itibaren gerçekleşen tüm invoke olaylarını alacağını göz önünde bulundurun.

AIR uygulamasının yalnızca bir örneği başlatılır. Zaten çalışmakta olan bir uygulama tekrar çağrılırsa, AIR çalışan

örneğe yeni bir invoke olayı gönderir. Bir invoke olayına yanıt vermek ve uygun eylemi gerçekleştirmek (yeni bir

belge penceresi açmak gibi) AIR uygulamasının sorumluluğundadır.

Page 265: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

258ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Uygulama başlatma ve uygulamadan çıkma seçenekleri

InvokeEvent nesnesi uygulamaya iletilen tüm argümanların yanı sıra, uygulamanın çağrıldığı dizini de içerir.

Uygulama bir dosya türü ilişkilendirmesi nedeniyle çağrıldıysa, dosya yolunun tamamı komut satırı argümanlarına

dahil edilir. Benzer şekilde uygulama bir uygulama güncellemesi nedeniyle çağrıldıysa, güncelleme AIR dosyası

yolunun tamamı sağlanır.

Uygulamanız invoke olaylarını, bir dinleyiciyi NativeApplication nesnesiyle kaydederek işleyebilir:

NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvokeEvent); air.NativeApplication.nativeApplication.addEventListener(air.InvokeEvent.INVOKE, onInvokeEvent);

Ve bir olay dinleyicisi tanımlama:

var arguments:Array; var currentDir:File; public function onInvokeEvent(invocation:InvokeEvent):void { arguments = invocation.arguments; currentDir = invocation.currentDirectory; }

Komut satırı argümanlarını yakalama

AIR uygulamasının başlatılmasıyla ilişkilendirilen komut satırı argümanları, NativeApplication nesnesi tarafından

gönderilen invoke olayında iletilir. InvokeEvent.arguments özelliği, bir AIR uygulaması çağrıldığında işletim

sistemi tarafından verilen bir dizi argümanı içerir. Argümanlar göreceli dosya yolları içeriyorsa, yolları genellikle

currentDirectory özelliğini kullanarak çözebilirsiniz.

Bir AIR programına iletilen argümanlar, çift tırnak işareti içinde olmadığı sürece beyaz boşluk sınırlı dizeler olarak

kabul edilir:

InvokeEvent.currentDirectory özelliği, uygulamanın başlatıldığı dizini temsil eden bir File nesnesi içerir.

Bir uygulama, uygulama tarafından kaydedilen türde bir dosya açıldığı için çağrıldığında, dosyanın yerel yolu komut

satırı argümanlarına dize olarak dahil edilir. (Dosyada istenilen işlemin açılmasından veya gerçekleştirilmesinden

uygulamanız sorumludur.) Benzer şekilde bir uygulama kendisini güncellemek üzere programlandığında (standart

AIR güncelleme kullanıcı arabirimine güvenmek yerine), kullanıcı, eşleşen uygulama kimliğine sahip bir uygulama

içeren AIR dosyasını çift tıklattığında AIR dosyasının yerel yolu da dahil edilir.

Dosyaya currentDirectory File nesnesinin resolve() yöntemini kullanarak erişebilirsiniz.

if((invokeEvent.currentDirectory != null)&&(invokeEvent.arguments.length > 0)){ dir = invokeEvent.currentDirectory; fileToOpen = dir.resolvePath(invokeEvent.arguments[0]); }

Ayrıca argümanın gerçekten bir dosya yolu olduğunu doğrulamanız gereklidir.

Argümanlar Dizi

tick tock {tick,tock}

tick "tick tock" {tick,tick tock}

"tick" “tock” {tick,tock}

\"tick\" \"tock\" {"tick","tock"}

Page 266: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

259ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Uygulama başlatma ve uygulamadan çıkma seçenekleri

Örnek: Invocation olay günlüğü

Aşağıdaki örnek invoke olayı için dinleyicilerin nasıl kaydedileceğini ve olayın nasıl işleneceğini gösterir. Örnek,

alınan tüm invocation olaylarının günlüğünü tutar ve geçerli dizini ve komut satırı argümanlarını gösterir.

Not: Aşağıdaki örneği Adobe® Flash® CS3 kullanarak oluşturmak için, öncelikle bir Flash Dosyası (Adobe AIR)

oluşturun. ActionScript 3.0 Ayarlar panelinde (Dosya > Yayınlama Ayarları... > Ayarlar düğmesi), Document sınıfı

alanına InvokeEventLogExample adını girin. FLA dosyasını InvokeEventLogExample.fla adıyla kaydedin. Ardından

aynı klasörde bir ActionScript dosyası oluşturun. Aşağıdaki kodu ActionScript dosyasına girin ve daha sonra dosyayı

InvokeEventLogExample.as adıyla kaydedin.

package { import flash.display.Sprite; import flash.events.InvokeEvent; import flash.desktop.NativeApplication; import flash.text.TextField; public class InvokeEventLogExample extends Sprite { public var log:TextField; public function InvokeEventLogExample() { log = new TextField(); log.x = 15; log.y = 15; log.width = 520; log.height = 370; log.background = true; addChild(log); NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke); } public function onInvoke(invokeEvent:InvokeEvent):void { var now:String = new Date().toTimeString(); logEvent("Invoke event received: " + now); if (invokeEvent.currentDirectory != null) { logEvent("Current directory=" + invokeEvent.currentDirectory.nativePath); } else {

Page 267: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

260ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Uygulama başlatma ve uygulamadan çıkma seçenekleri

logEvent("--no directory information available--"); } if (invokeEvent.arguments.length > 0) { logEvent("Arguments: " + invokeEvent.arguments.toString()); } else { logEvent("--no arguments--"); } } public function logEvent(entry:String):void { log.appendText(entry + "\n"); trace(entry); } } }

Oturum açılırken başlatma

NativeApplication.nativeApplication.startAtLogin=true ayarı yapılarak, geçerli kullanıcı oturum açtığında

AIR uygulaması otomatik olarak başlatılacak duruma getirilebilir. Bir kez ayarlandıktan sonra, kullanıcı her oturum

açtığında uygulama otomatik olarak başlatılır. Ayar false olarak değiştirilene, kullanıcı ayarı işletim sisteminden elle

değiştirene veya uygulama kaldırılana kadar, uygulama başlangıçta açılmaya devam eder. Oturum açılırken başlatma,

bir çalışma zamanı ayarıdır.

Not: Uygulama, bilgisayar sistemi başlatıldığında başlamaz. Kullanıcı oturum açtığında başlar. Ayar yalnızca geçerli

kullanıcıya yöneliktir. Ayrıca startAtLogin özelliğinin true olarak başarıyla ayarlanması için uygulama

yüklenmelidir. Uygulama yüklenmemişken özellik ayarlanırsa (ADL ile başlatıldığında olduğu gibi) bir hata verilir.

Tarayıcı başlatma

Bir web sitesi, tarayıcı başlatma özelliğini kullanarak, tarayıcıdan başlatılacak şekilde ayarlı olan yüklenmiş AIR

uygulamasını başlatabilir. Tarayıcı başlatmaya yalnızca uygulama tanımlayıcı dosyası allowBrowserInvocation

ayarını true olarak yaptıysa izin verilir:

<allowBrowserInvocation>true</allowBrowserInvocation>

Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 41.

Uygulama tarayıcı üzerinden çağrıldığında, uygulamanın NativeApplication nesnesi bir BrowserInvokeEvent nesnesi

gönderir.

Page 268: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

261ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Uygulama başlatma ve uygulamadan çıkma seçenekleri

BrowserInvokeEvent olaylarını almak için, AIR uygulamasında NativeApplication nesnesinin

(NativeApplication.nativeApplication) addEventListener() yöntemini çağırın. Bir olay dinleyicisi

BrowserInvokeEvent olayı için kaydolduğunda, kayıttan önce gerçekleşen tüm BrowserInvokeEvent olaylarını da alır.

Bu olaylar addEventListener() yöntemine yapılan çağrı geri döndükten sonra gönderilir, ancak bu gönderme

işlemi, kayıttan sonra alınmış olma ihtimali bulunan diğer BrowserInvokeEvent olaylarından önce gerçekleşmeyebilir.

Bu sayede, başlatma kodunuzun çalışmasından önce gerçekleşen (uygulama başlangıçta tarayıcıdan çağrıldığında

olduğu gibi) BrowserInvokeEvent olaylarını işleyebilirsiniz. Bir olay dinleyicisini çalışmaya sonradan ekleseniz de

(uygulama başlatıldıktan sonra), uygulamanın başlamasından itibaren gerçekleşen tüm BrowserInvokeEvent

olaylarını alacağını göz önünde bulundurun.

BrowserInvokeEvent nesnesi aşağıdaki özelliklere sahiptir:

Tarayıcı başlatma özelliğini kullanırsanız, güvenlik sonuçlarını dikkate aldığınızdan emin olun. Bir web sitesi AIR

uygulamasını başlattığında, verileri BrowserInvokeEvent nesnesinin arguments özelliğini kullanarak gönderebilir. Bu

verileri dosya veya kod yükleme API'leri gibi duyarlı bir işlemde kullanırken dikkatli olun. Tehlike düzeyi,

uygulamanın verilerle ne yaptığına bağlı olarak değişir. Yalnızca belirli bir web sitesinin uygulamayı çağırmasını

bekliyorsanız, uygulama BrowserInvokeEvent nesnesinin securityDomain özelliğini kontrol etmelidir. Ayrıca

uygulamayı çağıran web sitesinin HTTP'leri kullanmasını gerekli kılabilirsiniz, bunu da BrowserInvokeEvent

nesnesinin isHTTPS özelliğini kontrol ederek doğrulayabilirsiniz.

Uygulama, iletilen verileri doğrulamalıdır. Örneğin bir uygulamanın URL'leri belirli bir etki alanına iletmesi

bekleniyorsa, URL'lerin gerçekten de o etki alanına işaret ettiğini doğrulamalıdır. Böylece bir saldırganın, uygulamayı

yanıltarak duyarlı verileri kendisine göndermesini sağlaması engellenebilir.

Hiçbir uygulama, yerel kaynaklara işaret edebilecek BrowserInvokeEvent argümanlarını kullanmamalıdır. Örneğin

bir uygulama, tarayıcı tarafından iletilen bir yola dayalı olarak File nesneleri oluşturmamalıdır. Uzak yolların tarayıcı

tarafından iletilmesi bekleniyorsa, uygulama, yolların uzak bir protokol yerine file:// protokolünü kullanmasını

sağlamalıdır.

Bir uygulamanın tarayıcıdan çağrılmasına ilişkin ayrıntılar için bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan

başlatma” sayfa 282.

Özellik Açıklama

argümanlar Uygulamaya iletilecek bir argüman (dize) dizisi.

isHTTPS Tarayıcıdaki içeriğin https URL şemasını kullanıp (true) kullanmaması (false).

isUserEvent Tarayıcı başlatmanın bir user olayıyla sonuçlanıp sonuçlanmaması. AIR 1.0'da, bu ayar her zaman true

şeklindedir; AIR'de tarayıcı başlatma özelliği için bir user olayı gereklidir.

sandboxType Tarayıcıdaki içeriğin sanal alan türü. Geçerli değerler, Security.sandboxType özelliğinde kullanılabilen

değerlerle aynı olarak tanımlanır ve aşağıdakilerden biri olabilir:

• Security.APPLICATION — İçerik, uygulama güvenlik sanal alanındadır.

• Security.LOCAL_TRUSTED — İçerik, dosya sistemiyle yerel güvenlik sanal alanındadır.

• Security.LOCAL_WITH_FILE — İçerik, dosya sistemiyle yerel güvenlik sanal alanındadır.

• Security.LOCAL_WITH_NETWORK — İçerik, ağ iletişimiyle yerel güvenlik sanal alanındadır.

• Security.REMOTE — İçerik, uzak (ağ) etki alanındadır.

securityDomain "www.adobe.com" veya "www.example.org" gibi tarayıcıdaki içeriğin güvenlik etki alanı. Bu özellik

yalnızca uzak güvenlik sanal alanındaki içerik için (ağ etki alanından gelen içerik) ayarlanır. Yerel veya

uygulama güvenlik sanal alanındaki içerik için ayarlanmaz.

Page 269: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

262ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Uygulama başlatma ve uygulamadan çıkma seçenekleri

Uygulama sonlandırma

Bir uygulamayı sonlandırmanın en hızlı yolu NativeApplication.nativeApplication.exit() öğesini

çağırmaktır; uygulamanızın kaydedilecek verileri veya temizlenecek kaynakları yoksa bu oldukça işe yarayan bir

yöntemdir. exit() öğesini çağırmak tüm pencereleri kapatır ve uygulamayı sonlandırır. Ancak uygulamanızın

pencerelerinin veya diğer bileşenlerinin, örneğin gerekli verileri kaydetmek üzere sonlandırma işlemini kesmesine izin

vermek için, uygun uyarı olaylarını exit() öğesini çağırmadan önce gönderin.

Bir uygulamayı başarıyla kapatırken düşünülecek bir başka nokta, kapatma işlemi nasıl başlarsa başlasın tek bir

çalışma yolu sağlamaktır. Kullanıcı (veya işletim sistemi) uygulama sonlandırmayı aşağıdaki yollarla tetikleyebilir:

• NativeApplication.nativeApplication.autoExittrue olduğunda son uygulama penceresini kapatarak.

• Örneğin kullanıcı varsayılan menüden uygulamadan çık komutunu seçtiğinde işletim sisteminden uygulamadan

çıkış komutunu seçerek. Bu yalnızca Mac OS sisteminde gerçekleşir; Windows, sistem kenarlığı üzerinden

uygulamadan çıkış komutu sağlamaz.

• Bilgisayarı kapatarak.

Bir çıkış komutu bu rotalardan biriyle işletim sisteminde araya girdiğinde, NativeApplication bir exiting olayı

gönderir. Hiçbir dinleyici exiting olayını iptal etmezse, tüm açık pencereler kapanır. Her pencere bir closing ve

ardından bir close olayı gönderir. Pencerelerden biri closing olayını iptal ederse, kapatma işlemi durur.

Pencerelerin kapanma sırası uygulamanız için bir sorunsa, NativeApplication öğesinden exiting olayını dinleyin ve

pencereleri kendiniz uygun bir sırayla kapatın. Örneğin araç paletlerine sahip bir belge pencereniz varsa durum böyle

olabilir. Sistemin paletleri kapatması uygunsuz, hatta daha da kötü olabilirdi, ancak kullanıcı bazı verileri kaydetmek

için çıkış komutunu iptal etmeye karar verdi. Windows'ta exiting olayını yalnızca son pencereyi kapattıktan sonra

alırsınız (NativeApplication nesnesinin autoExit özelliği true değerine ayarlıysa).

Tüm platformlarda tutarlı davranış sağlamak için, çıkış sırası ister işletim sisteminden, ister menü komutlarından veya

ister uygulama mantığından başlatılmış olsun, uygulamadan çıkmak için aşağıdaki uygulamaları izleyin:

1 Her zaman uygulama kodunda exit() öğesini çağırmadan önce NativeApplication nesnesi üzerinden bir exiting

olayı gönderin ve uygulamanızın başka bir bileşeninin olayı iptal etmediğinden emin olun.

public function applicationExit():void { var exitingEvent:Event = new Event(Event.EXITING, false, true); NativeApplication.nativeApplication.dispatchEvent(exitingEvent); if (!exitingEvent.isDefaultPrevented()) { NativeApplication.nativeApplication.exit(); } }

2 NativeApplication.nativeApplication nesnesinden uygulama exiting olayını dinleyin ve işleyicideki tüm

pencereleri kapatın (önce bir closing olayı göndererek). Tüm pencereler kapatıldıktan sonra, uygulama verilerini

kaydetmek veya geçici dosyaları silmek gibi gerekli olan tüm temizlik görevlerini yerine getirin. Uygulamadan

çıkılmadan önce bittiğinden emin olmak için temizleme sırasında yalnızca senkronize yöntemler kullanın.

Pencerelerinizin kapanma sırası önemli değilse, NativeApplication.nativeApplication.openedWindows

dizisinde ilerleyebilir ve sırayla tüm pencereleri kapatabilirsiniz. Sıra önemliyse, pencerelerin doğru sırayla

kapanması için bir yöntem sağlayın.

Page 270: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

263ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Uygulama başlatma ve uygulamadan çıkma seçenekleri

private function onExiting(exitingEvent:Event):void { var winClosingEvent:Event; for each (var win:NativeWindow in NativeApplication.nativeApplication.openedWindows) { winClosingEvent = new Event(Event.CLOSING,false,true); win.dispatchEvent(winClosingEvent); if (!winClosingEvent.isDefaultPrevented()) { win.close(); } else { exitingEvent.preventDefault(); } } if (!exitingEvent.isDefaultPrevented()) { //perform cleanup } }

3 Windows her zaman kendi closing olaylarını dinleyerek kendi temizleme işlemini gerçekleştirmelidir.

4 Daha önceden çağrılan işleyiciler sonraki işleyicilerin exiting olayını iptal edip etmeyeceğini bilemeyeceği için,

uygulamanızda yalnızca bir exiting dinleyicisi kullanın (çalışma sırasına güvenmek de doğru olmaz).

Ayrıca bkz.

“AIR uygulamasının özelliklerini ayarlama” sayfa 41

“Özel uygulama güncelleme kullanıcı arabirimini sunma” sayfa 291

Page 271: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

264

Bölüm 27: Uygulama ayarlarını okuma

Çalışma zamanında, uygulamaya ilişkin yayıncı kimliğinin yanı sıra, uygulama tanımlayıcı dosyasının özelliklerini de

elde edebilirsiniz. Bunlar, NativeApplication nesnesinin applicationDescriptor ve publisherID özelliklerinde

ayarlanmıştır.

Uygulama tanımlayıcı dosyasını okuma

NativeApplication nesnesinin applicationDescriptor özelliğini getirerek, şu anda çalışmakta olan uygulamanın

uygulama tanımlayıcı dosyasını aşağıdaki şekilde XML nesnesi olarak okuyabilirsiniz:

var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;

Böylece XML (E4X) nesnesi olarak uygulama tanımlayıcı verilerine aşağıdaki şekilde erişebilirsiniz:

var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor; var ns:Namespace = appXml.namespace(); var appId = appXml.ns::id[0]; var appVersion = appXml.ns::version[0]; var appName = appXml.ns::filename[0]; air.trace("appId:", appId); air.trace("version:", appVersion); air.trace("filename:", appName); var xmlString = air.NativeApplication.nativeApplication.applicationDescriptor;

Daha fazla bilgi için bkz. “Uygulama tanımlayıcı dosyasının yapısı” sayfa 41.

Uygulama ve yayıncı kimliklerini getirme

Uygulama ve yayıncı kimlikleri birlikte bir AIR uygulamasını benzersiz olarak tanımlar. Uygulama tanımlayıcısının

<id> öğesinde uygulama kimliğini belirtirsiniz. Yayıncı kimliği, AIR yükleme paketini imzalamak için kullanılan

sertifikadan türetilir.

Uygulama kimliği, aşağıdaki kodda gösterildiği şekilde, NativeApplication nesnesinin id özelliğinden okunabilir:

trace(NativeApplication.nativeApplication.applicationID);

Yayıncı kimliği, NativeApplication publisherID özelliğinden okunabilir:

trace(NativeApplication.nativeApplication.publisherID);

Not: AIR uygulaması ADL ile çalıştırıldığında, ADL komut satırındaki -pubID bayrağı kullanılarak geçici bir kimlik

atanmadığı sürece, bir yayıncı kimliğine sahip olmaz.

Yüklenen bir uygulamaya ilişkin yayıncı kimliği, uygulama yükleme dizini içindeki META-INF/AIR/publisherid

dosyasında da bulunabilir.

Daha fazla bilgi için bkz. “AIR yayıncı kimlikleri hakkında” sayfa 285.

Page 272: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

265

Bölüm 28: Çalışma zamanı ve işletim sistemi bilgileriyle çalışma

Bu bölüm, bir AIR uygulamasının işletim sistemi dosya ilişkilendirmelerini yönetmek, kullanıcı etkinliğini saptamak

ve Adobe® AIR™ çalışma zamanı hakkında bilgi almak için kullandığı yolları tartışır.

Dosya ilişkilendirmelerini yönetme

Uygulamanız ve bir dosya türü arasındaki ilişkilendirmeler uygulama tanımlayıcısında bildirilmelidir. Yükleme işlemi

sırasında, başka bir uygulama önceden varsayılan olarak olarak belirlenmediği sürece, AIR uygulama yükleyicisi AIR

uygulamasını bildirilen tüm dosya türleri için varsayılan açılış uygulaması olarak ilişkilendirir. AIR uygulaması

yükleme işlemi, var olan dosya türü ilişkilendirmesini geçersiz kılmaz. İlişkilendirmeyi başka bir uygulamadan

devralmak için çalışma zamanında NativeApplication.setAsDefaultApplication() yöntemini çağırın.

Uygulamanız başladığında beklenen dosya ilişkilendirmelerinin yerinde olduğunu doğrulamak yararlı bir

uygulamadır. Bunun nedeni, AIR uygulama yükleyicisinin var olan dosya ilişkilendirmelerini geçersiz kılmaması ve

kullanıcı sistemindeki dosya ilişkilendirmelerinin her zaman değişebilir olmasıdır. Başka bir uygulama güncel dosya

ilişkilendirmesine sahipse, var olan bir ilişkilendirmenin devralınmasından önce kullanıcının onayını almak yerinde

bir uygulamadır.

NativeApplication sınıfının aşağıdaki yöntemleri, bir uygulamanın dosya ilişkilendirmelerini yönetmesine olanak

verir. Yöntemlerden her biri, dosya türü uzantısını parametre olarak alır:

AIR, yalnızca ilk olarak uygulama tanımlayıcısında bildirilen dosya türlerine ilişkin ilişkilendirmeleri yönetebilir.

Kullanıcı bu dosya türü ve uygulamanız arasındaki ilişkilendirmeyi elle oluşturmuş olsa bile, bildirilmemiş bir dosya

türünün ilişkilendirmeleri hakkında bilgi alamazsınız. Uygulama tanımlayıcısında bildirilmemiş bir dosya türüne

ilişkin uzantı aracılığıyla herhangi bir dosya ilişkilendirme yönetimi yönteminin çağırılması, uygulamanın çalışma

zamanı istisnası vermesine neden olur.

Dosya türlerinin uygulama tanımlayıcısında bildirilmesi hakkında bilgi için bkz. “Dosya türü ilişkilendirmelerini

bildirme” sayfa 48.

Yöntem Açıklama

isSetAsDefaultApplication() AIR uygulaması güncel olarak belirtilen dosya türüyle ilişkilendirilmişse true değerini döndürür.

setAsDefaultApplication() AIR uygulaması ve dosya türü açık eylemi arasında ilişkilendirme oluşturur.

removeAsDefaultApplication() AIR uygulaması ve dosya türü arasındaki ilişkilendirmeyi kaldırır.

getDefaultApplication() Dosya türüyle güncel olarak ilişkilendirilmiş uygulama yolunu bildirir.

Page 273: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

266ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Çalışma zamanı ve işletim sistemi bilgileriyle çalışma

Çalıştırma zamanı sürümü ve yama düzeyini getirme

NativeApplication nesnesi, uygulamanın yürütülmekte olduğu çalışma zamanının sürümünü belirten

runtimeVersion özelliğini içerir ("1.0.5" gibi bir dize). NativeApplication nesnesi ayrıca, çalışma zamanının yama

düzeyini ifade eden runtimePatchLevel özelliğini de içerir (2960 gibi bir sayı). Aşağıdaki kod bu özellikleri kullanır:

trace(NativeApplication.nativeApplication.runtimeVersion); trace(NativeApplication.nativeApplication.runtimePatchLevel);

AIR özelliklerini saptama

Adobe AIR uygulamasıyla paketlenen bir dosya için, Security.sandboxType özelliği Security.APPLICATION

sabitiyle tanımlanan değere ayarlanır. Aşağıdaki kodda gösterildiği şekilde, bir dosyanın Adobe AIR güvenlik sanal

alanında bulunuyor olup olmadığını temel alarak içerik (AIR'e özgü API'ler içerebilir veya içermeyebilir)

yükleyebilirsiniz.

if (Security.sandboxType == Security.APPLICATION) { // Load SWF that contains AIR APIs } else { // Load SWF that does not contain AIR APIs }

AIR uygulamasıyla yüklenmeyen tüm kaynaklar, bir web tarayıcısında Adobe® Flash® Player tarafından atanacağı

güvenlik sanal alanlarının aynılarına atanır. Uzak kaynaklar, kaynak etki alanlarına göre sanal alanlara yerleştirilir ve

yerel kaynaklar ağ iletişimiyle yerel, dosya sistemiyle yerel veya yerel güvenilir sanal alanlara yerleştirilir.

İçeriğin çalışma zamanında yürütülüp yürütülmediğini (ve bir tarayıcıda çalışan Flash Player'da çalışıp çalışmadığını)

görmek için Capabilities.playerType statik özelliğinin "Masaüstü" olarak ayarlanıp ayarlanmadığını kontrol

edebilirsiniz.

Daha fazla bilgi için bkz. “AIR güvenliği” sayfa 23.

Kullanıcı varlığını izleme

NativeApplication nesnesi, bir kullanıcının bilgisayarı ne zaman etkin olarak kullandığını saptamanıza yardımcı olan

iki olay gönderir. NativeApplication.idleThreshold özelliğiyle belirlenen aralıkta fare veya klavye etkinliği

saptanmadıysa, NativeApplication bir userIdle olayı gönderir. Bir sonraki klavye veya fare girdisi gerçekleştiğinde,

NativeApplication nesnesi bir userPresent olayı gönderir. idleThreshold aralığı saniye cinsinden ölçülür ve 300

varsayılan değerine sahiptir (5 dakika). Ayrıca, son kullanıcı girdisinden itibaren geçen saniye sayısını da

NativeApplication.nativeApplication.lastUserInput özelliğinden elde edebilirsiniz.

Aşağıdaki kod satırları, boşta kalma eşiğini 2 dakika olarak ayarlar ve hem userIdle hem de userPresent olayını

dinler::

Page 274: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

267ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Çalışma zamanı ve işletim sistemi bilgileriyle çalışma

NativeApplication.nativeApplication.idleThreshold = 120; NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE, function(event:Event) { trace("Idle"); }); NativeApplication.nativeApplication.addEventListener(Event.USER_PRESENT, function(event:Event) { trace("Present"); });

Not: Herhangi iki userPresent olayı arasında yalnızca bir userIdle olayı gönderilir.

Page 275: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

268

Bölüm 29: Ağ bağlantısını izleme

Adobe® AIR™, AIR uygulamasının yüklenmiş olduğu bilgisayardaki ağ bağlantısına ilişkin değişiklikleri izlemeye

yönelik araçlar sunar. Bir uygulama ağdan alınan verileri kullandığında, bu bilgi işinize yarayacaktır. Ayrıca, uygulama

bir ağ servisinin kullanılabilirliğini kontrol edebilir.

Ağ bağlantısı değişikliklerini saptama

AIR uygulamanız, güvenli olmayan ve değişken ağ bağlantıları içeren ortamlarda çalışabilir. Adobe AIR, bir

uygulamanın çevrimiçi kaynaklara yönelik bağlantıları yönetmesine yardımcı olmak için, ağ bağlantısının her

kullanılabilir veya kullanılamaz oluşunda bir ağ değişikliği olayı gönderir. Uygulamanın NativeApplication nesnesi ağ

değişikliği olayını gönderir. Bu olaya tepki vermek için bir dinleyici ekleyin:

NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetworkChange);

Ve bir olay işleyici işlevi tanımlayın:

function onNetworkChange(event:Event) {

//Check resource availability }

Event.NETWORK_CHANGE olayı, tüm ağ etkinliğinde gerçekleşen bir değişikliği değil, yalnızca bir ağ bağlantısının

değiştiğini gösterir. AIR, ağ değişikliğinin anlamını yorumlamaya çalışmaz. Ağa bağlı bir bilgisayar birçok gerçek ve

sanal bağlantıya sahip olabilir, bu nedenle bir bağlantının kaybedilmesi, kaynağın kaybedilmesi anlamına gelmeyebilir.

Diğer yandan, yeni bağlantılar da iyileştirilmiş kaynak kullanılabilirliğini garanti etmez. Bazen yeni bir bağlantı,

önceden kullanılabilir olan bir kaynağa erişimi bloke bile edebilir (örneğin VPN'e bağlanıldığında).

Genellikle, bir uygulamanın uzak bir kaynağa bağlanıp bağlanamayacağını belirlemenin tek yolu, denemektir. Bu

amaçla, air.net paketindeki servis izleme çerçeveleri, belirli bir ana bilgisayara ilişkin ağ bağlantısındaki değişiklikleri

olay tabanlı yanıtlama yöntemine sahip AIR uygulamaları sunar.

Not: Servis izleme çerçevesi, sunucunun bir isteği kabul edilebilir biçimde yanıtlayıp yanıtlamadığını saptar. Bu, tam

bağlantıyı garanti etmez. Ölçeklenebilir web servisleri, trafiği bir dizi web sunucusuna yönlendirmek için genellikle

önbelleğe alma ve yük dengeleme gereçlerini kullanır. Bu durumda, servis sağlayıcıları ağ bağlantısına ilişkin yalnızca

kısmi bir tanı sağlar.

Servis izleme temelleri

Servis izleme çerçevesi, AIR çerçevesinden ayrı olarak servicemonitor.swc dosyasında bulunur. Çerçeveyi kullanmak

için, servicemonitor.swc dosyası oluşturma işlemine dahil edilmelidir.

Önemli: Bu sınıfları ActionScript'te kullanmak için ServiceMonitorShim bileşenini Bileşenler panelinden Kitaplık'a

sürükleyin ve aşağıdaki import ifadesini ActionScript 3.0 kodunuza ekleyin:

import air.net.*;

Page 276: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

269ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Ağ bağlantısını izleme

ServiceMonitor sınıfı, ağ servislerinin izlenmesi için çerçeveyi uygular ve servis izlemeleri için temel işlevler sağlar.

Varsayılan olarak, bir ServiceMonitor sınıfı örneği, ağ bağlantısına ilişkin olaylar gönderir. ServiceMonitor nesnesi,

örnek oluşturulduğunda ve Adobe AIR'in her ağ değişikliği saptayışında bu olayları gönderir. Ayrıca, genel ağ

bağlantısı olaylarına bakılmaksızın milisaniye cinsinden belirli bir aralıkta bağlantıyı kontrol etmek için

ServiceMonitor örneiğinin pollInterval özelliğini ayarlayabilirsiniz. ServiceMonitor nesnesi, start() yöntemi

çağrılana kadar ağ bağlantısını kontrol etmez.

ServiceMonitor sınıfının alt sınıfı olan URLMonitor sınıfı, belirli bir URLRequest için HTTP bağlantısındaki

değişiklikleri saptar.

ServiceMonitor sınıfının başka bir alt sınıfı olan SocketMonitor sınıfı ise, belirli bir bağlantı noktasındaki belirli bir

ana bilgisayara ilişkin bağlantıdaki değişiklikleri saptar.

HTTP bağlantısını saptama

URLMonitor sınıfı, bağlantı noktası 80'de (HTTP iletişimi için tipik bağlantı noktası) belirli bir adrese HTTP

isteklerinin yapılıp yapılamayacağını belirler. Aşağıdaki kod, Adobe web sitesindeki bağlantı değişikliklerini saptamak

için bir URLMonitor sınıfı örneğini kullanır:

import air.net.URLMonitor; import flash.net.URLRequest; import flash.events.StatusEvent; var monitor:URLMonitor; monitor = new URLMonitor(new URLRequest('http://www.adobe.com')); monitor.addEventListener(StatusEvent.STATUS, announceStatus); monitor.start(); function announceStatus(e:StatusEvent):void {

trace("Status change. Current status: " + monitor.available); }

Soket bağlantısını saptama

AIR uygulamaları, itme modeli bağlanabilirliği için soket bağlantıları da kullanabilir. Güvenlik duvarları ve ağ

yönlendiricileri, güvenlik nedenleriyle genellikle yetkisiz bağlantı noktalarındaki ağ iletişimini kısıtlar. Bu nedenle

geliştiriciler, kullanıcıların soket bağlantıları kuramayabileceğini göz önünde bulundurmalıdır.

URLMonitor örneğiyle benzer olarak, aşağıdaki kod IRC için yaygın bir bağlantı noktası olan 6667'deki soket

bağlantısına ilişkin bağlantı değişikliklerini saptamak üzere bir SocketMonitor sınıfı örneğini kullanır.

import air.net.ServiceMonitor; import flash.events.StatusEvent; socketMonitor = new SocketMonitor('www.adobe.com',6667); socketMonitor.addEventListener(StatusEvent.STATUS, socketStatusChange); socketMonitor.start(); function announceStatus(e:StatusEvent):void { trace("Status change. Current status: " + socketMonitor.available); }

Page 277: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

270

Bölüm 30: URL istekleri ve ağ iletişimi

URL istekleri belirtmeye ilişkin yeni Adobe AIR işlevi, tarayıcıda çalışan SWF içeriği tarafından kullanılamaz. Bu işlev,

yalnızca uygulama güvenlik sanal alanındaki içerik tarafından kullanılabilir. Bu bölüm çalışma zamanındaki

URLRequest özelliklerini açıklar ve ağ iletişimi API değişiklikleri AIR içeriğini tartışır.

ActionScript™ 3.0 ağ iletişimi ve iletişim özelliklerini kullanma hakkında diğer bilgiler için Adobe® Flash® CS3 ve

Adobe® Flex™ Builder™ 3 ile birlikte teslim edilen ActionScript 3.0'ı Programlama bölümüne bakın.

URLRequest sınıfını kullanma

URLRequest sınıfı, yalnızca URL dizesinden fazlasını tanımlamanıza olanak verir. AIR, URLRequest sınıfına yalnızca

uygulama güvenlik sanal alanında çalışan AIR içeriği tarafından kullanılabilen bazı yeni özellikler ekler. Çalışma

zamanındaki içerik, yeni URL şemalarını (file ve http gibi standart şemalara ek olarak) kullanarak URL'leri

tanımlayabilir.

URLRequest özellikleri

URLRequest sınıfı, yalnızca AIR uygulama güvenlik sanal alanındaki içerik tarafından kullanılabilen aşağıdaki

özellikleri içerir:

URLRequest nesnesinin aşağıdaki özellikleri herhangi bir sanal alandaki içerik tarafından ayarlanabilir (yalnızca AIR

uygulama güvenlik sanal alanı değil):

Özellik Açıklama

followRedirects Yeniden yönlendirmelerin takip edilip (true, varsayılan değer) edilmeyeceğini (false) belirtir. Bu, yalnızca

çalışma zamanında desteklenir.

manageCookies HTTP protokol yığınının bu istek için tanımlama bilgilerini yönetmesi gerekip (true, varsayılan değer)

gerekmediğini (false) belirtir. Bu, yalnızca çalışma zamanında desteklenir.

authenticate Kimlik doğrulama isteklerinin bu istek için işlenmesi gerekip (true) gerekmediğini belirtir. Bu, yalnızca çalışma

zamanında desteklenir. Varsayılan, istekler için kimlik doğrulaması yapmaktır—sunucu kimlik bilgilerinin

gösterilmesini gerektiriyorsa bu, kimlik doğrulama iletişim kutusunun görüntülenmesine neden olabilir.

Kullanıcı adı ve parola da ayarlayabilirsiniz—bkz. “URLRequest varsayılanlarını ayarlama” sayfa 271.

cacheResponse Bu isteğe ilişkin başarılı yanıt verilerinin önbelleğe alınması gerekip gerekmediğini belirtir. Bu, yalnızca çalışma

zamanında desteklenir. Varsayılan, yanıtı önbelleğe almaktır (true).

useCache Bu URLRequest verileri almadan önce, yerel önbelleğe başvurulması gerekip gerekmediğini belirler. Bu,

yalnızca çalışma zamanında desteklenir. Varsayılan (true), kullanılabiliyorsa yerel önbelleğe alınmış sürümü

kullanmaktır.

userAgent HTTP isteğinde kullanılacak kullanıcı aracısı dizesini belirtir.

Özellik Açıklama

contentType URL isteğiyle gönderilen her verinin MIME içerik türü.

data URL isteği ile aktarılacak olan verileri içeren bir nesne.

digest Adobe® Flash® Player önbelleğini izlemek için önbelleğe alınmış bir dosyaya ilişkin güvenli bir "özet".

Page 278: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

271ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

URL istekleri ve ağ iletişimi

Not: HTMLLoader sınıfı, HTMLLoader nesnesi tarafından yüklenen içeriğe ait ayarlara ilişkin özellikler içerir.

Ayrıntılar için bkz. “HTMLLoader sınıfı hakkında” sayfa 206 .

URLRequest varsayılanlarını ayarlama

URLRequestDefaults sınıfıi URLRequest nesneleri için varsayılan ayarlarını tanımlamanızı sağlar. Örneğin, aşağıdaki

kod manageCookies ve useCache özellikleri için varsayılan değerleri ayarlar:

URLRequestDefaults.manageCookies = false; URLRequestDefaults.useCache = false; air.URLRequestDefaults.manageCookies = false; air.URLRequestDefaults.useCache = false;

URLRequestDefaults sınıfı, belirli bir ana bilgisayar için kullanmak üzere varsayılan bir kullanıcı adı ve parola

belirlemenizi sağlayan setLoginCredentialsForHost() yöntemini içerir. Yöntemin hostname parametresinde

tanımlanan ana bilgisayar, "www.example.com" gibi bir etki alanı veya "www.example.com:80" gibi bir etki alanı ve

bir bağlantı noktası numarası olabilir. "example.com", "www.example.com" ve "sales.example.com" öğelerinden

her birinin benzersiz ana bilgisayarlar olarak dikkate alındığını unutmayın.

Bu kimlik bilgileri, yalnızca sunucu onları istediğinde kullanılır. Kullanıcının kimlik doğrulaması önceden yapıldıysa

(örneğin, kimlik doğrulama iletişim kutusu kullanılarak), kimlik doğrulaması yapılan kullanıcıyı

setLoginCredentialsForHost() yöntemini çağırarak değiştiremezsiniz.

Örneğin, aşağıdaki kod www.example.com adresinde kullanılmak üzere varsayılan bir kullanıcı adı ve bir parola

ayarlar:

URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X"); air.URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X");

URLRequestDefaults ayarlarının her özelliği, özelliği ayarlayan içeriğin yalnızca uygulama etki alanına uygulanır.

Ancak, setLoginCredentialsForHost() yöntemi AIR uygulamasında bulunan tüm etki alanlarındaki içeriğe

uygulanır. Uygulama bu yolla bir ana bilgisayarda oturum açabilir ve uygulamadaki tüm içeriğin belirtilen kimlik

bilgileriyle oturum açmasını sağlar.

Daha fazla bilgi için ActionScript 3.0 Dil ve Bileşenler Başvurusu (http://www.adobe.com/go/learn_air_aslr_tr)

adresindeki URLRequestDefaults sınıfına bakın.

URL'lerde AIR URL şemalarını kullanma

Aşağıdaki gibi standart URL şemaları, AIR'deki herhangi bir güvenlik sanal alanındaki URL'leri tanımlarken

kullanılabilir:

http: ve https:

Bunları web tarayıcısında kullandığınız gibi kullanın.

method Bir GET veya POST işlemi gibi HTTP istek yöntemini denetler. (AIR uygulama etki alanında çalışan içerik, "GET"

veya "POST" dışındaki dizeleri method özelliği olarak belirleyebilir. Tüm HTTP fiilleri olanaklıdır ve "GET"

varsayılan yöntemdir. Bkz. “AIR güvenliği” sayfa 23 .)

requestHeaders HTTP istemine eklenecek HTTP istem başlıkları.

url İstenecek URL'yi belirtir.

Özellik Açıklama

Page 279: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

272ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

URL istekleri ve ağ iletişimi

file:

Bunu, dosya sisteminin köküne ilişkin bir yol belirtmek için kullanın. Örneğin:

file:///c:/AIR Test/test.txt

Uygulama güvenlik sanal alanında çalışan içeriğe ilişkin URL'yi tanımlarken aşağıdaki şemaları da kullanabilirsiniz:

app:

Bunu, yüklenen uygulamanın kök dizinine ilişkin bir yol belirtmek için kullanın (yüklenen uygulamaya ilişkin

uygulama tanımlayıcı dosyasını içeren dizin). Örneğin, aşağıdaki yol yüklenen uygulama dizininin kaynaklar alt

dizinine işaret eder:

app:/resources

Uygulama kaynak dizini, ADL uygulamasında çalışırken uygulama tanımlayıcı dosyasını içeren dizine ayarlanır.

app-storage:

Bunu, uygulama depo dizinine ilişkin bir yol belirtmek için kullanın. AIR, her kullanıcı için yüklenen her uygulamaya

ilişkin verileri depolamak üzere kullanışlı bir yer olan benzersiz bir uygulama depolama dizini tanımlar. Örneğin,

aşağıdaki yol uygulama depo dizininde yer alan ayarlar alz dizinindeki prefs.xml dosyasına işaret eder:

app-storage:/settings/prefs.xml

Uygulama depo dizini, kullanıcı adını, uygulama kimliğini ve yayıncı kimliğini temel alır:

• Mac OS'de—:

/Kullanıcılar/kullanıcı adı/Kitaplık/Tercihler/applicationID.publisherID/Local Store/

Örneğin:

/Users/babbage/Library/Preferences/com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1/Local Store

• Windows'ta—Belgeler ve Ayarlar dizininde:

kullanıcı adı/Uygulama Verileri/applicationID.publisherID/Local Store/

Örneğin:

C:\Documents and Settings\babbage\Application Data\com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Local Store

File.applicationStorageDirectory kullanılarak oluşturulan bir File nesnesine ilişkin URL (ve url özelliği) app-

storage URL şemasını aşağıdaki şekilde kullanır:

var dir:File = File.applicationStorageDirectory; dir = dir.resolvePath("preferences"); trace(dir.url); // app-storage:/preferences var dir = air.File.applicationStorageDirectory; dir = dir.resolvePath("prefs.xml"); air.trace(dir.url); // app-storage:/preferences

AIR'de URL şemaları kullanma

FileStream veya Sound nesnesi gibi çeşitli nesnelere ilişkin URL isteği tanımlamak için bu URL şemalarınından birini

kullanan bir URLRequest nesnesini kullanabilirsiniz. Bu şemaları AIR'de çalışan HTML içeriğinde de

kullanabilirsiniz; örneğin, bir img etiketinin src niteliğinde.

Ancak, AIR'e özgü bu URL şemalarını (app: ve app-storage:) yalnızca uygulama güvenlik sanal alanındaki içerikte

kullanabilirsiniz. Daha fazla bilgi için bkz. “AIR güvenliği” sayfa 23.

Page 280: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

273ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

URL istekleri ve ağ iletişimi

İzin verilmeyen URL şemaları

Bazı API'ler, içeriği bir web tarayıcısında başlatmanıza olanak verir. Güvenlik nedenleriyle, AIR'de bu API'leri

kullanırken bazı URL şemalarının kullanılmasına izin verilmez. İzin verilmeyen şemaların listesi, API'yi kullanan

kodun güvenlik sanal alanına bağlıdır. Ayrıntılar için bkz. “Varsayılan sistem web tarayıcısında bir URL açma”

sayfa 273 .

URLStream sınıfındaki değişiklikler

URLStream sınıfı indirilen URL'lerden indirilen verilere düşük düzeyli erişim sağlar. Çalışma zamanında, URLStream

sınıfı yeni bir olay içerir: httpResponseStatus. httpStatus olayının aksine, httpResponseStatus olayı tüm yanıt

verilerinden önce alınır. httpResponseStatus olayı (HTTPStatusEvent sınıfında tanımlanan), yanıtın döndüğü

kaynak URL olan responseURL özelliğini ve yanıtın döndürdüğü yanıt başlıklarını temsil eden URLRequestHeader

nesnesinin bir dizisi olan responseHeaders özelliğini içerir.

Varsayılan sistem web tarayıcısında bir URL açma

Varsayılan sistem web tarayıcısında bir UYL açmak için navigateToURL() işlevini kullanabilirsiniz. Bu işlevin

request parametresi olarak ilettiğiniz URLRequest nesnesi için yalnızca url özelliği kullanılır.

var url = "http://www.adobe.com"; var urlReq = new air.URLRequest(url); air.navigateToURL(urlReq);

navigateToURL() işlemini kullanırken, URL şemalarına navigateToURL() işlevini çağıran kodun güvenlik sanal

alanı temelinde izin verilir.

Bazı API'ler, içeriği bir web tarayıcısında başlatmanıza olanak verir. Güvenlik nedenleriyle, AIR'de bu API'leri

kullanırken bazı URL şemalarının kullanılmasına izin verilmez. İzin verilmeyen şemaların listesi, API'yi kullanan

kodun güvenlik sanal alanına bağlıdır. (Güvenlik sanal alanlarına ilişkin ayrıntılar için bkz. “AIR güvenliği” sayfa 23.)

Uygulama sanal alanı

Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.

• http:

• https:

• file:

• mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.

• app:

• app-storage:

Diğer URL şemalarına izin verilmez.

Uzak sanal alan

Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.

• http:

• https:

Page 281: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

274ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

URL istekleri ve ağ iletişimi

• mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.

Diğer URL şemalarına izin verilmez.

Dosyayla yerel sanal alan

Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.

• file:

• mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.

Diğer URL şemalarına izin verilmez.

Ağ iletişimiyle yerel sanal alan

Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.

• http:

• https:

• mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.

Diğer URL şemalarına izin verilmez.

Yerel güvenilir sanal alan

Aşağıdaki şemalara izin verilir. Bunları web tarayıcısında kullandığınız gibi kullanın.

• file:

• http:

• https:

• mailto: — AIR, bu istekleri kayıtlı sistem posta uygulamasına yönlendirir.

Diğer URL şemalarına izin verilmez.

Page 282: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

275

Bölüm 31: AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR uygulamaları tek bir AIR yükleme dosyası olarak dağıtılır, bu dosya uygulama kodunu ve tüm varlıkları içerir. Bu

dosyayı, indirme, e-posta gibi genel yöntemlerden biriyle veya CD-ROM gibi bir fiziksel ortamla dağıtabilirsiniz.

Kullanıcılar AIR dosyasını çift tıklatarak uygulamayı yükleyebilir. Kullanıcıların AIR uygulamanızı (ve gerekiyorsa

Adobe® AIR™ uygulamasını) yüklemelerini sağlayan kesintisiz yükleme özelliğini, web sayfasındaki tek bir linki

tıklatarak kullanabilirsiniz.

Bir AIR yükleme dosyası dağıtılmadan önce paketlenmeli ve kod imzalayıcı sertifikası ve özel bir anahtarla

imzalanmalıdır. Yükleme dosyasını dijital olarak imzalamak, uygulamanızın imzalandıktan sonra değiştirilmediğine

dair bir güvence sağlar. Buna ek olarak, dijital sertifikayı Verisign veya Thawte gibi güvenilen bir sertifika yetkilisi

yayımladıysa, kullanıcılarınız yayıncı ve imzalayan olarak kimliğinizi doğrulayabilir. Uygulama AIR Geliştirici

Aracı'yla (ADT) paketlendiğinde AIR dosyası imzalanır.

Bir uygulamayı Flash için AIR güncelleme kullanarak AIR dosyasına paketleme konusunda bilgi için, bkz. “AIR

uygulaması ve yükleme dosyaları oluşturma” sayfa 15.

Bir uygulamayı Adobe® AIR™ SDK kullanarak AIR dosyasına paketleme konusunda bilgi için, bkz. “AIR yükleme

dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme” sayfa 306.

AIR uygulamasını masaüstünden yükleme ve çalıştırma

Yalnızca AIR dosyasını alıcıya gönderin. Örneğin AIR dosyasını e-posta eki olarak veya bir web sayfasında link olarak

gönderebilirsiniz.

Kullanıcı AIR dosyasını indirdikten sonra, dosyayı yüklemek için şu talimatları izler:

1 AIR dosyasını çift tıklatın.

Adobe AIR bilgisayarda önceden yüklü olmalıdır.

2 Yükleme penceresinde, varsayılan ayarları seçili halde bırakın ve ardından Devam düğmesini tıklatın.

Windows'ta AIR otomatik olarak şunları yapar:

• Uygulamayı Program Dosyaları dizinine yükler

• Uygulama için bir masaüstü kısayolu oluşturur

• Başlat Menüsü kısayolu oluşturur.

• Program Ekle / Kaldır Denetim Masası'na uygulama için bir giriş ekler

Mac OS'de, uygulama varsayılan olarak Uygulamalar dizinine eklenir.

Uygulama zaten yüklenmişse yükleyici, kullanıcıya, uygulamanın var olan sürümünü açma veya indirilen AIR

dosyasındaki sürüme güncelleme seçenekleri arasında seçim yapma olanağı tanır. Yükleyici AIR dosyasındaki

uygulama kimliğini ve yayıncı kimliğini kullanarak uygulamayı tanımlar.

3 Yükleme işlemi tamamlandığında, Son düğmesini tıklatın.

Mac OS'de bir uygulamanın güncellenen sürümünü yüklemek için, kullanıcının uygulama dizinine yüklemek üzere

yeterli sistem ayrıcalığına sahip olması gerekir. Windows'ta kullanıcının yönetici ayrıcalıklarına sahip olması gerekir.

Page 283: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

276ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

Ayrıca uygulama yeni bir sürümü, ActionScript veya JavaScript kullanarak da yükleyebilir. Daha fazla bilgi için, bkz.

“AIR uygulamalarını güncelleme” sayfa 290.

AIR uygulaması yüklendikten sonra kullanıcı uygulamayı çalıştırmak için, diğer masaüstü uygulamalarında da olduğu

gibi yalnızca uygulama simgesini çift tıklatır.

• Windows'ta uygulamasının simgesini çift tıklatın (masaüstüne veya bir klasöre yüklüdür) veya Başlat menüsünden

uygulamayı seçin.

• Mac OS'de uygulamayı yüklendiği klasörde çift tıklatın. Varsayılan yükleme dizini /Applications dizinidir.

AIR kesintisiz yükleme özelliği sayesinde kullanıcı AIR uygulamasını web sayfasındaki bir linki tıklatarak yükleyebilir.

AIR tarayıcı başlatma özelliği sayesinde kullanıcı yüklenmiş olan AIR uygulamasını web sayfasındaki bir linki

tıklatarak çalıştırabilir. Bu özellikler aşağıdaki bölümde anlatılmaktadır.

AIR uygulamalarını web sayfasından yükleme ve çalıştırma

Kesintisiz yükleme özelliği, SWF dosyasını, kullanıcının bir AIR uygulamasını tarayıcıdan yüklemesini sağlayan bir

web sayfasına gömmenize olanak tanır. Çalışma zamanı yüklenmemişse, kesintisiz yükleme özelliği çalışma zamanını

yükler. Kesintisiz yükleme özelliği sayesinde kullanıcılar, AIR dosyasını bilgisayarlarına kaydetmeden AIR

uygulamasını yükleyebilirler. AIR SDK'de bir badge.swf dosyası mevcuttur, bu dosya sayesinde kesintisiz yükleme

özelliğini kolaylıkla kullanabilirsiniz. Ayrıntılar için bkz. “AIR uygulamasını yüklemek için badge.swf dosyasını

kullanma” sayfa 277.

Kesintisiz yükleme badge.swf dosyasını özelleştirme hakkında

SDK'yle beraber sağlanan badge.swf dosyasını kullanmaya ek olarak, bir tarayıcı sayfasında kullanmak için kendi SWF

dosyanızı oluşturabilirsiniz. Özel SWF dosyanız çalışma zamanıyla şu şekillerde etkileşimde bulunabilir:

• Bir AIR uygulaması yükleyebilir. Bkz. “Tarayıcıdan AIR uygulaması yükleme” sayfa 281.

• Belirli bir AIR uygulamasının yüklenip yüklenmediğine bakmak için kontrol edebilir. Bkz. “AIR uygulamasının

yüklenip yüklenmediğini bir web sayfasından kontrol etme” sayfa 281.

• Çalışma zamanının yüklenip yüklenmediğine bakmak için kontrol edebilir. Bkz. “Çalışma zamanının yüklenip

yüklenmediğini kontrol etme” sayfa 280.

• Yüklenmiş bir AIR uygulamasını kullanıcının sisteminde başlatabilir. Bkz. “Yüklenmiş bir AIR uygulamasını

tarayıcıdan başlatma” sayfa 282.

Bu özelliklerin tümü, adobe.com adresinde bulunan bir SWF dosyasındaki API'ler çağrılarak sağlanır: air.swf. Bu

bölümde badge.swf dosyasının nasıl kullanılacağı ve özelleştirileceği ve air.swf API'lerini kendi SWF dosyanızdan nasıl

çağıracağınız anlatılmaktadır.

Buna ek olarak tarayıcıda çalışan bir SWF dosyası, LocalConnection sınıfını kullanarak, çalışan bir AIR uygulamasıyla

iletişim kurabilir. Daha fazla bilgi için bkz. Uygulamalar arası iletişim.

Önemli: Bu bölümde anlatılan özellikler (ve air.swf dosyasındaki API'ler) son kullanıcının tarayıcısında Adobe® Flash®

Player 9 update 3'ün yüklü olmasını gerektirir. Flash Player'ın yüklü sürümünü kontrol etmek için kod yazabilir ve Flash

Player'ın gerekli sürümü yüklü değilse, kullanıcıya alternatif bir arabirim sağlayabilirsiniz. Örneğin Flash Player'ın daha

eski bir sürümü yüklüyse, AIR dosyasının yükleme sürümüne bir link verebilirsiniz (bir uygulama yüklemek için

badge.swf dosyasını veya air.swf API'sini kullanmak yerine).

Page 284: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

277ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR uygulamasını yüklemek için badge.swf dosyasını kullanma

AIR SDK'de bir badge.swf dosyası mevcuttur, bu dosya sayesinde kesintisiz yükleme özelliğini kolaylıkla

kullanabilirsiniz. badge.swf dosyası, çalışma zamanını ve AIR uygulamasını web sayfasındaki bir linkten yükleyebilir.

badge.swf dosyası ve kaynak kodu, web sitenizde yayınlamanız için size sağlanır.

Bu bölümdeki talimatlar, Adobe tarafından sağlanan badge.swf dosyasının parametrelerini ayarlama konusunda bilgi

sağlar. Ayrıca badge.swf dosyası için, özelleştirebileceğiniz kaynak kodunu da sağlıyoruz.

badge.swf dosyasını bir web sayfasına gömme

1 AIR SDK'nin samples/badge dizininde sağlanan aşağıdaki dosyaları bulun ve web sunucunuza ekleyin.

• badge.swf

• default_badge.html

• AC_RunActiveContent.js

2 default_badge.html sayfasını metin düzenleyicisinde açın.

3 default_badge.html sayfasında, AC_FL_RunContent() JavaScript işlevinde, aşağıdaki öğeler için FlashVars

parametre tanımlarını ayarlayın:

4 badge.swf dosyasının minimum boyutu 217 piksel genişlik, 180 piksel yüksekliktir. AC_FL_RunContent() işlevinin

width ve height parametrelerinin değerlerini ihtiyaçlarınızı karşılayacak şekilde ayarlayın.

5 İhtiyaçlarınızı karşılayacak şekilde default_badge.html dosyasını yeniden adlandırın ve kodunu ayarlayın (veya

başka bir HTML sayfasına dahil edin).

Ayrıca badge.swf dosyasını düzenleyebilir ve yeniden derleyebilirsiniz. Ayrıntılar için bkz. “badge.swf dosyasını

değiştirme” sayfa 278.

AIR uygulamasını bir web sayfasındaki kesintisiz yükleme linkinden yükleme

Kesintisiz yükleme linkini bir sayfaya ekledikten sonra kullanıcı, SWF dosyasındaki linki tıklatarak AIR uygulamasını

yükleyebilir.

1 Flash Player (sürüm 9 güncelleme 3 veya sonrası) yüklü olan bir web tarayıcısında HTML sayfasına gidin.

2 Web sayfasında, badge.swf dosyasındaki linki tıklatın.

• Çalışma zamanını yüklediyseniz, bir sonraki adıma geçin.

• Çalışma zamanını yüklemediyseniz, yüklemek isteyip istemediğinizi soran bir iletişim kutusu görüntülenir.

Çalışma zamanını yükleyin (bkz. “Adobe AIR yüklemesi” sayfa 1) ve bir sonraki adımla devam edin.

3 Yükleme penceresinde, varsayılan ayarları seçili halde bırakın ve ardından Devam düğmesini tıklatın.

Parametre Açıklama

appname Çalışma zamanı yüklü olmadığında SWF dosyası tarafından görüntülenen uygulama adı.

appurl (Zorunlu). Yüklenecek AIR dosyasının URL'si. Göreceli değil, mutlak bir URL kullanmalısınız.

airversion (Zorunlu). Çalışma zamanının 1.0 sürümü için bunu 1.0'a ayarlayın.

imageurl Kimlik kartında görüntülenecek görüntünün (isteğe bağlı) URL'si.

buttoncolor Yükleme düğmesinin rengi (FFCC00 gibi, onaltılık bir değer olarak belirtilir).

messagecolor Çalışma zamanı yüklü olmadığında düğmenin altında görüntülenen metin mesajının rengi (FFCC00 gibi,

onaltılık bir değer olarak belirtilir).

Page 285: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

278ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

Windows kullanan bir bilgisayarda AIR otomatik olarak şunları gerçekleştirir:

• Uygulamayı c:\Program Files\ konumuna yükler

• Uygulama için bir masaüstü kısayolu oluşturur

• Başlat Menüsü kısayolu oluşturur

• Program Ekle / Kaldır Denetim Masası'na uygulama için bir giriş ekler

Mac OS'de yükleyici uygulamayı Uygulamalar dizinine ekler (örneğin Mac OS'de /Applications dizininde).

4 İstediğiniz seçenekleri belirleyin, ardından Yükle düğmesini tıklatın.

5 Yükleme işlemi tamamlandığında, Son düğmesini tıklatın.

badge.swf dosyasını değiştirme

AIR SDK, badge.swf dosyası için kaynak dosyalar sağlar. Bu dosyalar SDK'nin src klasöründe bulunmaktadır:

Flash CS3 veya CS4 uygulamasını badge.fla dosyasının görsel arabirimini yeniden tasarlamak için kullanabilirsiniz.

AIRBadge sınıfında tanımlanan AIRBadge() yapıcı işlevi, http://airdownload.adobe.com/air/browserapi/air.swf

adresinde barındırılan air.swf dosyasını yükler. air.swf dosyası, kesintisiz yükleme özelliğini kullanma için kod içerir.

air.swf dosyası başarıyla yüklendiğinde, onInit() yöntemi (AIRBadge sınıfında) çağrılır:

private function onInit(e:Event):void { _air = e.target.content; switch (_air.getStatus()) { case "installed" : root.statusMessage.text = ""; break; case "available" : if (_appName && _appName.length > 0) { root.statusMessage.htmlText = "<p align='center'><font color='#" + _messageColor + "'>In order to run " + _appName + ", this installer will also set up Adobe® AIR™.</font></p>"; } else { root.statusMessage.htmlText = "<p align='center'><font color='#" + _messageColor + "'>In order to run this application, " + "this installer will also set up Adobe® AIR™.</font></p>"; } break; case "unavailable" : root.statusMessage.htmlText = "<p align='center'><font color='#" + _messageColor + "'>Adobe® AIR™ is not available for your system.</font></p>"; root.buttonBg_mc.enabled = false; break; } }

Kaynak dosyalar Açıklama

badge.fla badge.swf dosyasını derlemek için kullanılan kaynak Flash CS3 veya CS4 dosyası. badge.fla dosyası bir SWF 9

dosyasına (Flash Player'da yüklenebilir) derlenir.

AIRBadge.as basdge.fla dosyasında kullanılan temel sınıfı tanımlayan bir ActionScript 3.0 sınıfı.

Page 286: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

279ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

Kod, global _air değişkenini yüklenen air.swf dosyasının ana sınıfına ayarlar. Bu sınıf, badge.swf dosyasının kesintisiz

yükleme işlevini çağırmak için eriştiği aşağıdaki genel yöntemleri içerir:

url ve runtimeVersion için ayarlar, konteyner HTML sayfasındaki FlashVars ayarları kullanılarak SWF dosyasına

iletilir.

Uygulama, yüklemeden sonra otomatik olarak başlarsa, yüklenen uygulamanın başlatmadan sonra badge.swf

dosyasına başvurması için LocalConnection iletişimini kullanabilirsiniz. Ayrıntılar için bkz. Uygulamalar arası

iletişim.

Ayrıca, bir uygulamanın yüklenip yüklenmediğini kontrol etmek için air.swf dosyasının getApplicationVersion()

yöntemini de çağırabilirsiniz. Bu yöntemi uygulama yükleme işleminden önce veya yükleme başladıktan sonra

çağırabilirsiniz. Ayrıntılar için bkz. “AIR uygulamasının yüklenip yüklenmediğini bir web sayfasından kontrol etme”

sayfa 281.

air.swf dosyasını yükleme

Bir tarayıcıdaki web sayfasından çalışma zamanı ve AIR uygulamalarıyla etkileşimde bulunmak için air.swf

dosyasındaki API'leri kullanan kendi SWF dosyanızı oluşturabilirsiniz. air.swf dosyası

http://airdownload.adobe.com/air/browserapi/air.swf adresinde bulunmaktadır. air.swf API'lerine SWF dosyanızdan

başvurmak için, air.swf dosyasını SWF dosyanızla aynı uygulama etki alanına yükleyin. Aşağıdaki kod, yükleme SWF

dosyasının uygulama etki alanına air.swf dosyasını yüklemeye dair bir örnek gösterir:

Yöntem Açıklama

getStatus() Çalışma zamanının bilgisayara yüklenip yüklenmediğini (veya yüklenip yüklenemeyebileceğini) belirler.

Ayrıntılar için bkz. “Çalışma zamanının yüklenip yüklenmediğini kontrol etme” sayfa 280.

installApplication() Kullanıcının bilgisayarında belirtilen uygulamayı yükler. Ayrıntılar için bkz. “Tarayıcıdan AIR uygulaması

yükleme” sayfa 281.

• url—URL'yi tanımlayan bir dize. Göreceli değil, mutlak bir URL yolu kullanmalısınız.

• runtimeVersion—Uygulama tarafından yüklenmesi gerekli kılınan çalışma zamanının sürümünü

("1.0.M6" gibi) gösteren bir dize.

• arguments— Yüklemenin ardından başlatılırsa uygulamaya iletilecek olan argümanlar. Uygulama

tanımlayıcı dosyasında allowBrowserInvocation öğesi true olarak ayarlanmışsa, yüklemenin

ardından uygulama başlatılır. (Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR

uygulamasının özelliklerini ayarlama” sayfa 41.) Uygulama, tarayıcıdan kesintisiz yüklemenin bir sonucu

olarak başlatılırsa (kullanıcının yüklemeden sonra başlatmayı seçmesiyle), yalnızca argümanlar iletilirse

uygulamanın NativeApplication nesnesi bir BrowserInvokeEvent nesnesi gönderir. Uygulamaya ilettiğiniz

verilerin güvenlik sonuçlarını göz önünde bulundurun. Ayrıntılar için bkz. “Yüklenmiş bir AIR uygulamasını

tarayıcıdan başlatma” sayfa 282.

Page 287: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

280ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

var airSWF:Object; // This is the reference to the main class of air.swf var airSWFLoader:Loader = new Loader(); // Used to load the SWF var loaderContext:LoaderContext = new LoaderContext(); // Used to set the application domain loaderContext.applicationDomain = ApplicationDomain.currentDomain; airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onInit); airSWFLoader.load(new URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf"), loaderContext); function onInit(e:Event):void { airSWF = e.target.content; }

air.swf dosyası yüklendikten sonra (Loader nesnesinin contentLoaderInfo nesnesi init olayını gönderdiğinde),

air.swf API'lerinden herhangi birini çağırabilirsiniz. Bu API'ler şu bölümlerde anlatılmaktadır:

• “Çalışma zamanının yüklenip yüklenmediğini kontrol etme” sayfa 280

• “AIR uygulamasının yüklenip yüklenmediğini bir web sayfasından kontrol etme” sayfa 281

• “Tarayıcıdan AIR uygulaması yükleme” sayfa 281

• “Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma” sayfa 282

Not: AIR SDK'yle sağlanan badge.swf dosyası, air.swf dosyasını otomatik olarak yükler. Bkz. “AIR uygulamasını

yüklemek için badge.swf dosyasını kullanma” sayfa 277. Bu bölümdeki talimatlar, air.swf dosyasını yükleyen kendi SWF

dosyanızı oluşturmaya yöneliktir.

Çalışma zamanının yüklenip yüklenmediğini kontrol etme

SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf dosyasındaki

getStatus() yöntemini çağırarak, çalışma zamanının yüklenip yüklenmediğini kontrol edebilir. Ayrıntılar için bkz.

“air.swf dosyasını yükleme” sayfa 279.

air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıda olduğu gibi air.swf dosyasının getStatus() yöntemini

çağırabilir:

var status:String = airSWF.getStatus();

getStatus() yöntemi, bilgisayardaki çalışma zamanının durumuna bağlı olarak aşağıdaki dize değerlerinden birini

döndürür:

Flash Player'ın (sürüm 9 yükseltme 3) gerekli sürümü tarayıcıda yüklü değilse, getStatus() yöntemi hata verir.

Dize değeri Açıklama

"available" Bu bilgisayara çalışma zamanı yüklenebilir, ancak şu anda yüklü değil.

"unavailable" Bu bilgisayara çalışma zamanı yüklenemez.

"installed" Bu bilgisayarda çalışma zamanı yüklü.

Page 288: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

281ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR uygulamasının yüklenip yüklenmediğini bir web sayfasından kontrol

etme

SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf dosyasındaki

getApplicationVersion() yöntemini çağırarak AIR uygulamasının (eşleşen bir uygulama kimliği ve yayıncı

kimliğiyle) yüklenip yüklenmediğini kontrol edebilir. Ayrıntılar için bkz. “air.swf dosyasını yükleme” sayfa 279.

air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıda olduğu gibi air.swf dosyasının getApplicationVersion()

yöntemini çağırır:

var appID:String = "com.example.air.myTestApplication"; var pubID:String = "02D88EEED35F84C264A183921344EEA353A629FD.1"; airSWF.getApplicationVersion(appID, pubID, versionDetectCallback); function versionDetectCallback(version:String):void { if (version == null) { trace("Not installed."); // Take appropriate actions. For instance, present the user with // an option to install the application. } else { trace("Version", version, "installed."); // Take appropriate actions. For instance, enable the // user interface to launch the application. } }

getApplicationVersion() yöntemi aşağıdaki parametrelere sahiptir:

Flash Player'ın (sürüm 9 yükseltme 3) gerekli sürümü tarayıcıda yüklü değilse, getApplicationVersion() yöntemi

hata verir.

Tarayıcıdan AIR uygulaması yükleme

SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf

dosyasındaki installApplication() yöntemini çağırarak bir AIR uygulaması yükleyebilir. Ayrıntılar için bkz.

“air.swf dosyasını yükleme” sayfa 279.

air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıdaki kodda olduğu gibi air.swf dosyasının

installApplication() yöntemini çağırabilir:

Parametreler Açıklama

appID Uygulama için uygulama kimliği. Ayrıntılar için bkz. “Temel uygulama bilgilerini tanımlama” sayfa 42.

pubID Uygulama için yayıncı kimliği. Ayrıntılar için bkz. “AIR yayıncı kimlikleri hakkında” sayfa 285.

callback İşleyici işlevi olarak hizmet görecek bir geri çağırma işlevi. getApplicationVersion() yöntemi senkronize

çalışmaz ve yüklü sürümü (veya yüklü sürüm olmadığını) saptadıktan sonra, bu geri çağırma yöntemi çağrılır.

Geri çağırma yöntemi tanımı bir parametre, yüklenmiş uygulamanın sürüm dizesine ayarlı bir dize içermelidir.

Uygulama yüklenmemişse, önceki kod örneğinde gösterildiği gibi işleve bir null değeri iletilir.

Page 289: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

282ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

var url:String = "http://www.example.com/myApplication.air"; var runtimeVersion:String = "1.0"; var arguments:Array = ["launchFromBrowser"]; // Optional airSWF.installApplication(url, runtimeVersion, arguments);

installApplication() yöntemi, kullanıcının bilgisayarında belirtilen uygulamayı yükler. Bu yöntem aşağıdaki

parametrelere sahiptir:

installApplication() yöntemi yalnızca, fare tıklatması gibi bir kullanıcı olayına yönelik olay işleyicisinde

çağrıldığında çalışabilir.

Flash Player'ın (sürüm 9 yükseltme 3) gerekli sürümü tarayıcıda yüklü değilse, installApplication() yöntemi hata

verir.

Mac OS'de bir uygulamanın güncellenen sürümünü yüklemek için, kullanıcının uygulama dizinine yüklemek üzere

yeterli sistem ayrıcalığına (ve uygulama çalışma zamanını güncelliyorsa yönetici ayrıcalıklarına) sahip olması gerekir.

Windows'ta kullanıcı yönetici ayrıcalıklarına sahip olmalıdır.

Ayrıca, bir uygulamanın önceden yüklenip yüklenmediğini kontrol etmek için air.swf dosyasının

getApplicationVersion() yöntemini de çağırabilirsiniz. Bu yöntemi uygulama yükleme işlemi başlamadan önce

veya yükleme başladıktan sonra çağırabilirsiniz. Ayrıntılar için bkz. “AIR uygulamasının yüklenip yüklenmediğini bir

web sayfasından kontrol etme” sayfa 281. Uygulama çalıştıktan sonra, LocalConnection sınıfını kullanarak

tarayıcıdaki SWF içeriğiyle iletişim kurabilir. Ayrıntılar için bkz. Uygulamalar arası iletişim.

Yüklenmiş bir AIR uygulamasını tarayıcıdan başlatma

Tarayıcı başlatma özelliğini kullanmak için (tarayıcıdan başlatılmasına izin vererek), hedef uygulamanın uygulama

tanımlayıcı dosyası aşağıdaki ayarı içermelidir:

<allowBrowserInvocation>true</allowBrowserInvocation>

Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 41.

Tarayıcıdaki bir SWF dosyası, http://airdownload.adobe.com/air/browserapi/air.swf adresinden yüklenen air.swf

dosyasındaki launchApplication() yöntemini çağırarak bir AIR uygulamasını başlatabilir. Ayrıntılar için bkz.

“air.swf dosyasını yükleme” sayfa 279.

air.swf dosyası yüklendikten sonra, SWF dosyası, aşağıdaki kodda olduğu gibi air.swf dosyasının

launchApplication() yöntemini çağırabilir:

var appID:String = "com.example.air.myTestApplication"; var pubID:String = "02D88EEED35F84C264A183921344EEA353A629FD.1"; var arguments:Array = ["launchFromBrowser"]; // Optional airSWF.launchApplication(appID, pubID, arguments);

Parametre Açıklama

url Yüklenecek AIR dosyasının URL'sini tanımlayan dize. Göreceli değil, mutlak bir URL yolu kullanmalısınız.

runtimeVersion Uygulama tarafından yüklenmesi gerekli kılınan çalışma zamanının sürümünü ("1.0" gibi) gösteren bir dize.

arguments Yüklemenin ardından başlatılırsa uygulamaya iletilecek olan argüman dizisi. Uygulama tanımlayıcı dosyasında

allowBrowserInvocation öğesi true olarak ayarlanmışsa, yüklemenin ardından uygulama başlatılır.

(Uygulama tanımlayıcı dosyası hakkında daha fazla bilgi için bkz. “AIR uygulamasının özelliklerini ayarlama”

sayfa 41.) Uygulama, tarayıcıdan kesintisiz yüklemenin bir sonucu olarak başlatılırsa (kullanıcının yüklemeden

sonra başlatmayı seçmesiyle), yalnızca argümanlar iletilmişse uygulamanın NativeApplication nesnesi bir

BrowserInvokeEvent nesnesi gönderir. Ayrıntılar için bkz. “Yüklenmiş bir AIR uygulamasını tarayıcıdan

başlatma” sayfa 282.

Page 290: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

283ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

launchApplication() yöntemi air.swf dosyasının (kullanıcı arabirimi SWF dosyasının uygulama etki alanında

yüklüdür) üst düzeyinde tanımlanır. Bu yöntemi çağırmak AIR'in belirtilen uygulamayı başlatmasına neden olur

(yüklüyse ve tarayıcı başlatması olanağı varsa, uygulama tanımlayıcı dosyasındaki allowBrowserInvocation ayarını

kullanarak). Bu yöntem aşağıdaki parametrelere sahiptir:

launchApplication() yöntemi yalnızca, fare tıklatması gibi bir user olayı için olay işleyicisinde çağrıldığında

çalışabilir.

Flash Player'ın (sürüm 9 yükseltme 3) gerekli sürümü tarayıcıda yüklü değilse, launchApplication() yöntemi hata

verir.

Uygulama tanımlayıcı dosyasında allowBrowserInvocation öğesi false olarak ayarlıysa, launchApplication()

yöntemini çağırmanın hiçbir etkisi yoktur.

Kullanıcı arabirimini uygulamayı başlatmak için sunmadan önce, air.swf dosyasında getApplicationVersion()

yöntemini çağırmak isteyebilirsiniz. Ayrıntılar için bkz. “AIR uygulamasının yüklenip yüklenmediğini bir web

sayfasından kontrol etme” sayfa 281.

Uygulama tarayıcı başlatma özelliği üzerinden çağrıldığında, uygulamanın NativeApplication nesnesi bir

BrowserInvokeEvent nesnesi gönderir. Ayrıntılar için bkz. “Tarayıcı başlatma” sayfa 260.

Tarayıcı başlatma özelliğini kullanıyorsanız, “Tarayıcı başlatma” sayfa 260 konusunda belirtilen güvenlik sonuçlarını

göz önünde bulundurduğunuzdan emin olun.

Uygulama çalıştıktan sonra, LocalConnection sınıfını kullanarak tarayıcıdaki SWF içeriğiyle iletişim kurabilir.

Ayrıntılar için bkz. Uygulamalar arası iletişim.

Kuruluş konuşlandırma

BT yöneticileri Adobe AIR çalışma zamanı ve AIR uygulamalarını, standart masaüstü konuşlandırma araçlarını

kullanarak sessiz bir şekilde yükleyebilir. BT yöneticileri şunları yapabilir:

• Microsoft SMS, IBM Tivoli gibi araçları veya önyükleyici kullanan sessiz yükleme işlemlerine olanak sağlayan

herhangi bir konuşlandırma aracını kullanarak Adobe AIR çalışma zamanını sessizce yükleyebilir

• Çalışma zamanını konuşlandırmak için kullanılan araçların aynılarını kullanarak AIR uygulamasını sessizce

yükleyebilir

Daha fazla bilgi için, bkz. Adobe AIR Yönetici Kılavuzu (http://www.adobe.com/go/learn_air_admin_guide_tr).

Parametre Açıklama

appID Başlatılacak uygulamanın uygulama kimliği. Ayrıntılar için bkz. “Temel uygulama bilgilerini tanımlama”

sayfa 42.

pubID Başlatılacak uygulamanın yayıncı kimliği. Ayrıntılar için bkz. “AIR yayıncı kimlikleri hakkında” sayfa 285.

arguments Uygulamaya iletilecek bir argüman dizisi. Uygulamanın NativeApplication nesnesi, bu diziye ayarlanmış bir

özellikler kümesine sahip olan BrowserInvokeEvent olayını gönderir.

Page 291: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

284ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR dosyasını dijital olarak imzalama

AIR yükleme dosyalarınızı tanınan bir sertifika yetkilisi (CA) tarafından yayımlanan bir sertifikayla dijital olarak

imzalamak, kullanıcılarınıza, yükledikleri uygulamanın yanlışlıkla veya kötü amaçla değiştirilmediğine dair bir

güvence verir ve sizi imzalayan (yayıncı) olarak tanımlar. AIR uygulaması güvenilen veya yükleme bilgisayarında

güvenilen bir sertifikaya zincirle bağlanan bir sertifikayla imzalandığında, AIR, yükleme sırasında yayıncı adını

görüntüler. Aksi takdirde yayıncı adı “Bilinmeyen” olarak görüntülenir.

Önemli: Kötü amaçlı bir varlık, imzalama anahtar deposu dosyanızı bir şekilde ele geçirirse veya özel anahtarınızı

bulursa, AIR dosyasında sizin kimliğinizi kullanarak sahtecilik yapabilir.

Kod imzalayıcı sertifikalar hakkında bilgi

Kod imzalayıcı sertifikaların kullanımına ilişkin güvenlik teminatları, sınırlamalar ve yasal zorunluluklar Sertifika

Uygulama Bildirimleri'nde (CPS) ve sertifikayı yayımlayan yetkili tarafından yayınlanan abone sözleşmelerinde

anlatılır. En büyük 2 sertifika yetkilisinin sözleşmeleri hakkında daha fazla bilgi için:

Verisign CPS (http://www.verisign.com/repository/CPS/)

Verisign Abone Sözleşmesi (Verisign Subscriber’s Agreement)

(https://www.verisign.com/repository/subscriber/SUBAGR.html)

Thawte CPS (http://www.thawte.com/cps/index.html)

Thawte Kod İmzalama Geliştirici Sözleşmesi (Thawte Code Signing Developer's Agreement)

(http://www.thawte.com/ssl-digital-certificates/free-guides-whitepapers/pdf/develcertsign.pdf)

AIR kod imzalama hakkında

AIR dosyası imzalandığında, yükleme dosyasına bir dijital imza dahil edilir. İmza, AIR dosyasının imzalandıktan

sonra değiştirilmediğini doğrulamak için kullanılan bir paket özetini ve yayıncı kimliğini doğrulamak için kullanılan

imzalayıcı sertifikayla ilgili bilgileri içerir.

AIR, bir sertifikaya güvenilip güvenilmeyeceğini belirlemek için işletim sisteminin sertifika deposuyla desteklenen

ortak anahtar altyapısını (PKI) kullanır. Yayıncı bilgilerinin doğrulanması için, AIR uygulamasının yüklendiği

bilgisayar AIR uygulamasını imzalamak için kullanılan sertifikaya doğrudan güvenmeli veya sertifikayı güvenilen bir

sertifika yetkilisine bağlayan bir sertifika zincirine güvenmelidir.

AIR dosyası güvenilen kök sertifikalarından birine zincirle bağlı olmayan bir sertifikayla (normalde bu tüm kendinden

imzalı sertifikaları da içerir) imzalanırsa, yayıncı bilgileri doğrulanamaz. AIR, AIR paketinin imzalandıktan sonra

değiştirilmediğini belirleyebilse de, dosyayı gerçekten kimin oluşturduğunu ve imzaladığını bilmenin bir yolu yoktur.

Not: Kullanıcı kendinden imzalı bir sertifikaya güvenmeyi seçebilir, bundan sonra sertifikayla imzalanmış olan tüm AIR

uygulamaları sertifikada yayıncı adı olarak ortak ad alanı değerini görüntüler. AIR, kullanıcının bir sertifikayı güvenilir

olarak belirlemesi için herhangi bir yöntem sağlamaz. Sertifika (özel anahtar dahil değil) kullanıcıya ayrı olarak

sağlanmalıdır ve kullanıcı sertifikayı sistem sertifika deposunda uygun bir konuma içe aktarmak için, işletim sistemi

tarafından sağlanan mekanizmalardan birini veya uygun bir araç kullanmalıdır.

Page 292: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

285ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR yayıncı kimlikleri hakkında

AIR dosyası oluşturmanın bir parçası olarak, AIR Geliştirici Aracı (ADT) bir yayıncı kimliği oluşturur. Bu, AIR

dosyasını oluşturmada kullanılan sertifika için benzersiz olan bir kimliktir. Aynı sertifikayı birden fazla AIR

uygulaması için yeniden kullanırsanız, uygulamalar aynı yayıncı kimliğine sahip olur. Yayıncı kimliği

LocalConnection iletişiminde AIR uygulamasını tanımlamak için kullanılır (bkz. Uygulamalar arası iletişim).

Yüklenmiş bir uygulamanın yayıncı kimliğini, NativeApplication.nativeApplication.publisherID özelliğini

okuyarak tanımlayabilirsiniz.

Aşağıdaki alanlar yayıncı kimliğini hesaplamak için kullanılır: Name, CommonName, Surname, GivenName, Initials,

GenerationQualifier, DNQualifier, CountryName, localityName, StateOrProvinceName, OrganizationName,

OrganizationalUnitName, Title, Email, SerialNumber, DomainComponent, Pseudonym, BusinessCategory,

StreetAddress, PostalCode, PostalAddress, DateOfBirth, PlaceOfBirth, Gender, CountryOfCitizenship,

CountryOfResidence ve NameAtBirth. Bir sertifika yetkilisi tarafından yayımlanan sertifikayı yenilerseniz veya

kendinden imzalı bir sertifikayı yeniden oluşturursanız, yayıncı kimliğinin aynı kalması için bu alanların da aynı

olması gerekir. Buna ek olarak, CA tarafından yayımlanan bir sertifikanın kök sertifikasıyla kendinden imzalı bir

sertifikanın ortak anahtarı da aynı olmalıdır.

Sertifika formatları hakkında

AIR imzalama araçları, Java Şifreleme Mimarisi (JCA) ile erişilebilen tüm anahtar depolarını kabul eder. Bunlar

arasında PKCS12 formatlı dosyalar (genellikle .pfx veya .p12 dosya uzantısı kullanan), Java .keystore dosyaları,

PKCS11 donanım anahtar depoları ve sistem anahtar depoları gibi dosya tabanlı anahtar depoları bulunmaktadır.

ADT'nin erişebildiği anahtar deposu formatları, ADT'yi çalıştırmak için kullanılan Java çalışma zamanının sürümüne

ve yapılandırmasına bağlıdır. PKCS11 donanım belirteçleri gibi bazı anahtar deposu türlerine erişmek, ek yazılım

sürücülerinin ve JCA eklentilerinin yüklenmesini ve yapılandırılmasını gerektirebilir.

AIR dosyalarını imzalamak için, var olan bir sınıf 3, yüksek güvenceli kod imzalayıcı sertifikayı kullanabilir veya yeni

bir tane edinebilirsiniz. Örneğin aşağıdaki Verisign veya Thawte sertifika türlerinden herhangi biri kullanılabilir:

• Verisign:

• Microsoft Authenticode Digital ID

• Sun Java Signing Digital ID

• Thawte:

• AIR Geliştirici Sertifikası

• Apple Geliştirici Sertifikası

• JavaSoft Geliştirici Sertifikası

• Microsoft Authenticode Sertifikası

Not: Sertifika, kod imzalama için işaretlenmiş olmalıdır. Genelde bir SSL sertifikasını AIR dosyalarını imzalamak için

kullanamazsınız.

Zaman damgaları

Bir AIR dosyasını imzaladığınızda paketleme aracı, zaman damgası yetkilisinin sunucusunu, bağımsız doğrulanabilir

bir imzalama tarihi ve saati almak için sorgular. Alınan zaman damgası AIR dosyasına gömülüdür. İmzalayıcı sertifika

imzalama sırasında geçerli olduğu sürece, sertifikanın süresi dolduktan sonra bile AIR dosyası yüklenebilir. Diğer

yandan, zaman damgası alınamazsa, sertifikanın süresi dolduğunda veya sertifika iptal edildiğinde AIR dosyası artık

yüklenemez hale gelir.

Page 293: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

286ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

AIR paketleme araçları varsayılan olarak bir zaman damgası alır. Ancak zaman damgası hizmeti kullanılamadığında

uygulamaların paketlenmesini sağlamak için, zaman damgalamayı devre dışı bırakabilirsiniz. Adobe, genel olarak

dağıtılan tüm AIR dosyalarının bir zaman damgası içermesini önerir.

AIR paketleme araçları tarafından kullanılan varsayılan zaman damgası yetkilisi Geotrust'tır.

Sertifika alma

Bir sertifika almak için normalde sertifika yetkilisinin web sitesini ziyaret edersiniz ve şirketin tedarik işlemini

tamamlarsınız. AIR araçlarının ihtiyacı olan anahtar deposu dosyasını oluşturmak için kullanılan araçlar, satın alınan

sertifikanın türüne, sertifikanın alıcı bilgisayarda nasıl saklandığına ve bazı durumlarda sertifikayı almak için

kullanılan tarayıcının türüne bağlıdır. Örneğin Verisign veya Thawte, bir Microsoft Authenticode sertifikasını almak

ve dışa aktarmak için Microsoft Internet Explorer kullanmanızı gerekli kılar. Bu şekilde sertifika doğrudan Internet

Explorer kullanıcı arabiriminden .pfx dosyası olarak dışa aktarılabilir.

AIR kurulum dosyalarını paketlemek için, Air Geliştirici Aracı'nı (ADT) kullanarak kendinden imzalı bir sertifika

oluşturabilirsiniz. Bazı üçüncü taraf araçlar da kullanılabilir.

Kendinden imzalı bir sertifikanın nasıl oluşturulacağı ve AIR dosyasını imzalama konusunda talimatlar için, bkz. “AIR

yükleme dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme” sayfa 306. Ayrıca AIR dosyalarını Flex Builder,

Dreamweaver ve Flash için AIR güncelleme kullanarak da dışa aktarabilir ve imzalayabilirsiniz.

Aşağıdaki örnek, Thawte Sertifika Yetkilisi'nden AIR Geliştirici Sertifikası'nın nasıl alınacağını ve sertifikanın ADT'yle

kullanıma nasıl hazırlanacağını anlatır. Bu örnek kod imzalayıcı sertifikasını alma ve kullanıma hazırlama yollarından

yalnızca birini göstermektedir.

Örnek: Thawte'den AIR Geliştirici Sertifikası alma

Thawte web sitesi, AIR Geliştirici Sertifikası'nı satın almak için Mozilla Firefox tarayıcı kullanmanızı gerekli kılar.

Sertifikanın özel anahtarı, tarayıcının anahtar deposunda saklanmaktadır. Firefox anahtar deposunun ana şifreyle

korunduğundan ve bilgisayarın da fiziksel koşullar bakımından güvencede olduğundan emin olun. (Tedarik işlemi

tamamlandıktan sonra, sertifika anahtarını ve özel anahtarı tarayıcı anahtar deposundan dışa aktarabilir ve

kaldırabilirsiniz.)

Sertifika kayıt işleminin bir parçası olarak, bir özel/ortak anahtar çifti oluşturulur. Özel anahtar otomatik olarak

Firefox anahtar deposunda saklanır. Sertifikayı Thawte’nin web sitesinden istemek ve almak için aynı bilgisayarı ve

tarayıcıyı kullanmalısınız.

1 Thawte web sitesini ziyaret edin ve Kod İmzalayıcı Sertifikalar için Ürün sayfası (Product page for Code Signing

Certificates) bölümüne gidin.

2 Kod İmzalayıcı Sertifikalar listesinden, Adobe AIR Geliştirici Sertifikası'nı seçin.

3 Üç adımlı kayıt işlemini tamamlayın. Kuruluş ve irtibat bilgileri vermeniz gerekir. Daha sonra Thawte kimlik

doğrulama işlemini gerçekleştirir ve ek bilgiler isteyebilir. Doğrulama tamamlandıktan sonra Thawte size

sertifikayı almanız için gereken talimatların bulunduğu bir e-posta yollar.

Not: Not: Gerekli belge türüyle ilgili ek bilgilere şuradan ulaşılabilir: https://www.thawte.com/ssl-digital-

certificates/free-guides-whitepapers/pdf/enroll_codesign_eng.pdf.

4 Thawte sitesinden yayımlanan sertifikayı alın. Sertifika otomatik olarak Firefox anahtar deposuna kaydedilir.

5 Özel anahtarı ve sertifikayı içeren bir anahtar deposu dosyasını Firefox anahtar deposundan aşağıdaki adımları

izleyerek dışa aktarın:

Page 294: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

287ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

Not: Özel anahtarı/sertifikayı Firefox'tan dışarı aktarırken, ADT, Flex, Flash ve Dreamweaver'ın kullanabileceği

.p12 (pfx) formatında dışa aktarılır.

a Firefox Sertifika Yöneticisi iletişim kutusunu açın:

b Windows'ta: Araçlar -> Seçenekler -> Gelişmiş -> Sertifikalar -> Sertifikaları Yönet öğelerini açın

c Mac OS'de: Firefox -> Tercihler -> Gelişmiş -> Sertifikalarınız -> Sertifikaları Görüntüle öğelerini açın

d Sertifika listesinden Adobe AIR Kod İmzalayıcı Sertifikası'nı seçin ve Yedekle düğmesini tıklatın.

e Anahtar deposu dosyasının dışa aktarılacağı bir dosya adı ve konum girin ve Kaydet'i tıklatın.

f Firefox ana şifresini kullanıyorsanız dosyayı dışa aktarırken, yazılım güvenlik aygıtı için şifrenizi girmeniz

istenir. (Bu şifre yalnızca Firefox tarafından kullanılır.)

g Sertifika Yedekleme Şifresi Seç iletişim kutusunda, anahtar deposu dosyası için bir şifre oluşturun.

Önemli: Bu şifre anahtar deposu dosyasını korur ve dosya, AIR uygulamalarını imzalamada kullanılırken

gereklidir. Güvenli bir şifre seçilmelidir.

h Tamam'ı tıklatın. Başarılı bir yedekleme şifresi mesajı almanız gerekir. Özel anahtarı ve sertifikayı içeren anahtar

deposu dosyası .p12 dosya uzantısıyla (PKCS12 formatında) kaydedilir.

6 Dışa aktarılan anahtar deposu dosyasını ADT, Flex Builder, Flash veya Dreamweaver ile kullanın. Dosya için

oluşturulan şifre, bir AIR uygulaması imzalanacağı zaman gereklidir.

Önemli: Özel anahtar ve sertifika, Firefox anahtar deposunda saklanmaya devam eder. Bu sayede sertifika dosyasının

ek bir kopyasını dışa aktarabilirsiniz, ancak sertifikanızın ve özel anahtarınızın güvenliğinin sağlanması için korunması

gereken bir başka erişim noktası da sağlanmış olur.

Sertifikaları değiştirme

Bazı durumlarda, AIR uygulamanızı imzalamak için kullandığınız sertifikayı değiştirmeniz gerekebilir. Bu durumlar

şunlardır:

• Kendinden imzalı bir sertifikadan bir sertifika yetkilisi tarafından yayımlanan bir sertifikaya yükseltme yapılırken

• Süresi dolmak üzere olan kendinden imzalı bir sertifika, başka bir sertifikayla değiştirilirken

• Bir ticari sertifika diğeriyle değiştirilirken, örneğin şirketinizin kimliği değiştiğinde

İmzalayıcı sertifika AIR uygulamasının kimliğini belirleyen öğelerden biri olduğu için, uygulamanız için bir

güncellemeyi farklı bir sertifikayla imzalayamazsınız. AIR'in bir AIR dosyasını güncelleme olarak tanıması için, hem

orijinal hem de güncellenen AIR dosyasını aynı sertifikayla imzalamanız gerekir. Aksi takdirde AIR, var olan

yüklemeyi güncellemek yerine yeni AIR dosyasını ayrı bir uygulama olarak yükler.

AIR 1.1 sürümünden itibaren, bir uygulamanın imzalayıcı sertifikası bir geçiş imzası kullanılarak

değiştirilebilmektedir. Geçiş imzası, güncelleme AIR dosyasına uygulanan ikinci imzadır. Geçiş imzası, imzalayanın

uygulamanın orijinal yayıncısı olduğunu belirten orijinal sertifikayı kullanır.

Önemli: Orijinal sertifikanın süresi dolmadan veya orijinal sertifika iptal edilmeden sertifika değiştirilmelidir.

Sertifikanızın süresi dolmadan önce geçiş imzasıyla imzalanan bir güncelleme oluşturmazsanız, kullanıcılar herhangi bir

güncelleme yüklemeden önce uygulamanızın var olan sürümünü kaldırmak zorunda kalır. Ticari olarak yayımlanan

sertifikalar genellikle sürenin dolmasını önlemek için yenilenebilir. Kendinden imzalı sertifikalar yenilenemez.

Sertifikaları değiştirmek için:

1 Uygulamanız için bir güncelleme oluşturun

2 Güncelleme AIR dosyasını yeni sertifikayla paketleyin ve imzalayın

Page 295: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

288ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

3 AIR dosyasını orijinal sertifikayla (ADT -migrate komutunu kullanarak) yeniden imzalayın

Geçiş imzası uygulama yordamı “Uygulama sertifikasını değiştirmek için AIR dosyasını imzalama” sayfa 312

bölümünde anlatılmaktadır.

Güncellenen AIR dosyası yüklendiğinde, uygulamanın kimliği değişir. Bu kimlik değişikliğinin etkileri şunlardır:

• Uygulamanın yayıncı kimliği yeni sertifikayla eşleşmek için değişir.

• Yeni uygulama sürümü, var olan şifreli yerel depodaki verilere erişemez.

• Uygulama depolama dizininin konumu değişir. Eski konumdaki veriler yeni dizine kopyalanmaz. (Ancak yeni

uygulama, eski yayıncı kimliğine bağlı olarak orijinal dizini bulabilir).

• Uygulama artık eski yayıncı kimliğini kullanarak yerel bağlantıları açamaz.

• Bir kullanıcı geçiş öncesi AIR dosyasını yeniden yüklerse, AIR bu dosyayı orijinal yayıncı kimliğini kullanarak ayrı

bir uygulama olarak yükler.

Uygulamanın orijinal ve yeni sürümleri arasındaki verilerin geçişini yapmak uygulamanızın sorumluluğundadır.

Şifreli yerel depodaki (ELS) verilerin geçişini yapmak için, verileri sertifikada değişiklik yapılmadan dışa aktarmanız

gerekir. Uygulamanızın yeni sürümünün eski sürümün ELS'sini okuması imkansızdır. (Genellikle verileri yeniden

oluşturmak, verilerin geçişini yapmaktan daha kolaydır.)

Geçiş imzasını olabildiğince fazla sayıdaki sonraki güncellemeye uygulamaya devam etmelisiniz. Aksi takdirde,

orijinalden yükseltme yapmamış olan kullanıcıların bir ara geçiş sürümü yüklemeleri veya sizin son güncellemenizi

yükleyebilmek için kendi geçerli sürümlerini kaldırmaları gerekir. Sonunda orijinal sertifikanın süresi dolar ve siz de

artık geçiş imzası uygulayamazsınız. (Ancak, zaman damgalamayı devre dışı bırakmadığınız sürece, önceden bir geçiş

imzasıyla imzalanan AIR dosyaları geçerliliğini korur. Geçiş imzasının zaman damgası sayesinde AIR, sertifikanın

süresi dolduktan sonra bile imzayı kabul eder.)

Geçiş imzasına sahip bir AIR dosyası diğer yönlerden normal bir AIR dosyasıdır. Uygulama bir sisteme orijinal

sürümü olmadan yüklenirse, AIR yeni sürümü normal bir şekilde yükler.

Not: Ticari olarak yayımlanmış bir sertifikayı yenilediğinizde, genellikle sertifikaya geçiş yapmanız gerekmez. Yenilenen

sertifika, ayırt edilen ad değiştirilene kadar orijinaliyle aynı yayıncı kimliğini korur. Ayırt edilen adın belirlenmesine

yönelik kullanılan sertifika niteliklerinin tam listesi için, bkz. “AIR yayıncı kimlikleri hakkında” sayfa 285.

Terminoloji

Bu bölümde, uygulamanızı genel dağıtım için nasıl imzalamanız gerektiğine yönelik kararlar alırken anlamanız

gereken bazı anahtar sözcükleri kapsayan bir terimler sözlüğü bulunmaktadır.

Terim Açıklama

Sertifika Yetkilisi (CA) Güvenilen bir üçüncü taraf olarak hizmet veren ve sonunda bir ortak anahtar sahibinin kimliğini

onaylayan ortak anahtar altyapı ağındaki bir varlık. Normalde bir CA, sertifika sahibinin kimliğini

doğruladığını bildirmek için kendi özel anahtarıyla imzalanan dijital sertifikalar yayımlar.

Sertifika Uygulama Bildirimi (CPS) Sertifika yetkilisinin sertifika yayımlama ve doğrulamaya ilişkin uygulamalarını ve politikalarını

ortaya koyar. CPS, CA ile aboneleri ve bağlı olduğu taraflar arasındaki anlaşmanın bir parçasıdır.

Ayrıca kimlik doğrulama politikalarını ve sağladıkları sertifikaların sunduğu güvence düzeyleri de

anlatır.

Sertifika İptal Listesi (CRL) İptal edilen ve artık bağlı olunmaması gereken yayımlanmış sertifikaların bir listesi. AIR, bir AIR

uygulaması imzalandığında ve mevcut zaman damgası yoksa yine uygulama yüklendiğinde CRL'yi

kontrol eder.

Sertifika zinciri Bir sertifika zinciri, zincirdeki her sertifikanın bir sonraki sertifika tarafından imzalandığı bir sertifika

sırası.

Page 296: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

289ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını Dağıtma, Yükleme ve Çalıştırma

Dijital Sertifika Sahibin kimliği, sahibin ortak anahtarı ve sertifikanın kendi kimliği hakkında bilgi içeren dijital bir

belge. Bir sertifika yetkilisi tarafından yayımlanan sertifika da, yayımlayan CA'ya ait bir sertifika

tarafından imzalanır.

Dijital İmza Yalnızca ortak-özel anahtar çiftinin yarısı olan ortak anahtarla şifresi çözülebilen şifreli bir mesaj

veya özet. Bir PKI'de dijital imza, sonunda sertifika yetkilisine kadar izlenebilen bir veya daha fazla

dijital sertifika içerir. Kişinin yayımlayan sertifika yetkilisine, imzalayanın kimliğine güvendiğini

varsayarak, dijital imza bir mesajın (veya bilgisayar dosyasının) imzalandığından beri

değiştirilmediğini doğrulamak için kullanılabilir (kullanılan şifreleme algoritmasının sağladığı

güvence sınırları dahilinde).

Anahtar Deposu Dijital sertifikaları ve bazı durumlarda ilgili özel anahtarları içeren veri tabanı.

Java Şifreleme Mimarisi (JCA) Anahtar depolarını yönetmek ve bunlara erişmek için kullanılan genişletilebilir bir mimari. Daha

fazla bilgi için bkz. Java Şifreleme Mimarisi Başvuru Kılavuzu (Java Cryptography Architecture

Reference Guide).

PKCS #11 RSA Laboratuvarları'nın Şifreleme Belirteci Arabirim Standardı. Donanım belirteci tabanlı anahtar

deposu.

PKCS #12 RSA Laboratuvarları'nın Kişisel Bilgi Alışverişi Sözdizimi Standardı. Genellikle bir özel anahtarı ve

ilişkilendirilmiş dijital sertifikasını içeren dosya tabanlı anahtar deposu.

Özel Anahtar İki parçalı ortak-özel anahtar asimetrik şifreleme sisteminin özel olan yarısı. Özel anahtar gizli

tutulmalıdır ve hiçbir zaman bir ağ üzerinden iletilmemelidir. Dijital olarak imzalanan mesajlar,

imzalayan tarafından özel anahtarla şifrelenir.

Ortak Anahtar İki parçalı ortak-özel anahtar asimetrik şifreleme sisteminin ortak olan yarısı. Ortak anahtar

kullanıma açıktır ve özel anahtarla şifrelenen mesajların şifresini çözmek için kullanılır.

Ortak Anahtar Altyapısı (PKI) Sertifika yetkililerinin ortak anahtar sahiplerinin kimliğini doğruladığı güven sistemi. Ağın

istemcileri, dijital bir mesajı (veya dosyayı) imzalayanın kimliğini doğrulamak için güvenilen bir CA

tarafından yayımlanan dijital sertifikalara güvenir.

Zaman damgası Bir olayın gerçekleştiği tarihi ve saati içeren dijital olarak imzalanmış veri. ADT, zaman damgasını

AIR paketindeki RFC 3161 uyumlu zaman sunucusundan dahil edebilir. AIR mevcut olduğunda

zaman damgasını, sertifikanın imzalama sırasındaki geçerliliğini belirlemek için kullanır. Bu sayede

imzalayıcı sertifikasının süresi dolduktan sonra da AIR uygulaması yüklenebilir.

Zaman damgası yetkilisi Zaman damgalarını yayımlayan yetkili. Bir zaman damgasının AIR tarafından tanınması için,

damganın RFC 3161 ile uyumlu olması ve zaman damgası imzasının yükleme bilgisayarındaki

güvenilen kök sertifikaya zincirle bağlı olması gerekir.

Terim Açıklama

Page 297: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

290

Bölüm 32: AIR uygulamalarını güncelleme

Kullanıcılar, bilgisayarlarındaki veya tarayıcıdaki (kesintisiz yükleme özelliğini kullanarak) bir AIR dosyasını çift

tıklatarak bir AIR uygulamasını yükleyebilir veya güncelleyebilirler. Adobe® AIR™ yükleyici uygulaması, önceden var

olan bir uygulamayı güncellediğinde kullanıcıyı uyararak yüklemeyi yönetir. (Bkz. “AIR uygulamalarını Dağıtma,

Yükleme ve Çalıştırma” sayfa 275.)

Ancak, Updater sınıfını kullanarak kendini yeni sürüme güncelleyen yüklenmiş bir uygulamanız da olabilir.

(Yüklenmiş bir uygulama, yeni bir sürümün indirilmek ve yüklenmek üzere kullanılabilir olduğunu saptayabilir.)

Updater sınıfı, kullanıcının bilgisayarında yer alan bir AIR dosyasını göstermek ve bu sürüme güncellemenizi sağlayan

bir update() yöntemini içerir.

Güncelleme AIR dosyasının hem uygulama kimliği hem de yayıncı kimliği, güncellenecek uygulamanınkilerle

eşleşmelidir. Yayıncı kimliği imzalanan sertifikadan türetilir, yani hem güncelleme hem de güncellenecek uygulama,

aynı sertifikayla imzalanmış olmalıdır.

AIR 1.1 sürümünden itibaren, bir uygulamayı yeni bir kod imzalayan sertifika kullanması için taşıyabilirsiniz. Yeni bir

imza kullanması için bir uygulamayı taşıma, hem yeni hem de orijinal sertifikayı içeren güncelleme AIR dosyasını

imzalamayı içerir. Sertifika taşıma, tek yönlü bir işlemdir. Taşımadan sonra, yalnızca yeni sertifikayla (veya her iki

dosyayla) imzalanan AIR dosyaları var olan bir yüklemeye güncellemeler olarak dikkate alınır.

Kendinden imzalı sertifikayı ticari kod imzalayan sertifika olarak değiştirmek veya bir kendinden imzalı veya ticari

sertifikadan diğerine geçmek için sertifiya taşımayı kullanabilirsiniz. Sertifikayı taşımazsanız, var olan kullanıcılar yeni

sürümü yüklemeden önce geçerli uygulama sürümlerini kaldırmak zorunda kalır. Daha fazla bilgi için bkz.

“Sertifikaları değiştirme” sayfa 287.

Uygulamaları güncelleme hakkında

Updater sınıfı (flash.desktop paketindeki), geçerli uygulamanızı farklı bir sürümle güncellemek için kullanabileceğiniz

update() yöntemini içerir. Örneğin, kullanıcının masaüstünde bir AIR dosyası sürümü ("Sample_App_v2.air")

bulunuyorsa, aşağıdaki kod uygulamayı günceller:

var updater:Updater = new Updater(); var airFile:File = File.desktopDirectory.resolvePath("Sample_App_v2.air"); var version:String = "2.01"; updater.update(airFile, version);

Updater sınıfını kullanmadan önce, kullanıcı veya uygulama AIR dosyasının güncellenmiş sürümünü bilgisayara

yüklemelidir. Daha fazla bilgi için bkz. “Kullanıcının bilgisayarına bir AIR dosyası indirme” sayfa 292.

Yöntem çağrısının sonuçları

Çalışma zamanındaki bir uygulama update() yöntemini çağırdığında, çalışma zamanı uygulamayı kapatır ve daha

sonra AIR dosyasından yeni sürümü yüklemeye çalışır. Çalışma zamanı, AIR dosyasında belirtilen uygulama kimliği

ve yayıncı kimliğinin update() yöntemini çağıran uygulamaya ilişkin uygulama kimliği ve yayıncı kimliğiyle eşleşip

eşleşmediğini kontrol eder. (Uygulama kimliği ve yayıncı kimliği hakkında bilgi için bkz. “AIR uygulamasının

özelliklerini ayarlama” sayfa 41.) Çalışma zamanı ayrıca, sürüm dizesinin update() yöntemine iletilen sürüm dizesiyle

eşleşip eşleşmediğini kontrol eder. Yükleme başarıyla tamamlanırsa, çalışma zamanı uygulamanın yeni sürümünü

açar. Aksi halde (yükleme tamamlanamazsa), uygulamanın var olan (yükleme öncesi) sürümünü yeniden açar.

Page 298: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

291ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını güncelleme

Mac OS'de uygulamanın güncellenmiş bir sürümünü yüklemek için, kullanıcının uygulama dizinine yükemek için

yeterli sistem ayrıcalıklarına sahip olması gerekir. Windows'ta, kullanıcının yönetici ayrıcalıklarına sahip olması

gerekir.

Uygulamanın güncellenmiş sürümü çalışma zamanının güncellenmiş sürümünü gerektiriyorsa, yeni çalışma zamanı

sürümü yüklenir. Kullanıcı, çalışma zamanını güncellemek için bilgisayara ilişkin yönetici ayrıcalıklarına sahip

olmalıdır.

ADL kullanarak uygulama test edilirken update() yönteminin çağrılması bir çalışma zamanı istisnasına neden olur.

Sürüm dizesi hakkında

update() yönteminin sürüm parametresi olarak belirtilen dize, yüklenecek AIR dosyasına ilişkin uygulama

tanımlayıcı dosyasında bulunan ana uygulama öğesinin sürüm niteliğindeki dizeyle eşleşmelidir. Sürüm

parametresinin belirtilmesi, güvenlik nedenleri için gereklidir. Uygulamanın AIR dosyasında sürüm numarasını

doğrulaması istenerek, geçerli uygulamada giderilmiş olan bir güvenlik açığını içerebilecek daha eski bir sürümün

yanlışlıkla yüklenmesi engellenir. Uygulama, indirgeme saldırılarını engellemek için yüklenmiş uygulamadaki sürüm

dizesiyle AIR dosyasındaki sürüm dizesinin eşleşip eşleşmediğini de kontrol etmelidir.

Sürüm dizesi herhangi bir formatta olabilir. Örneğin, "2.01" veya "sürüm 2" olabilir. Bu dizenin formatına karar

vermek, siz uygulama geliştiricisine bırakılmıştır. Çalışma zamanı sürüm dizesini doğrulamaz; uygulama kodu, bunu

uygulamanın güncellenmesinden önce yapmalıdır.

Adobe AIR uygulaması web üzerinden bir AIR dosyası indirirse, web servisinin Adobe AIR uygulamasını indirilen

sürüme ilişkin bilgilendirebileceği bir mekanizmaya sahip olmak, iyi bir uygulamadır. Bu şekilde, uygulama dizeyi

update() yönteminin version parametresi olarak kullanabilir. AIR dosyası sürümünün bilinmediği diğer

yöntemlerle elde edildiyse, AIR uygulaması sürüm bilgisini belirlemek için AIR dosyasını inceleyebilir. (AIR dosyası,

sıkıştırılmış bir ZIP arşividir ve uygulama tanımlayıcı dosyası arşivdeki ikinci kayıttır.)

Uygulama tanımlayıcı dosyası hakkında ayrıntılar için bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 41.

Özel uygulama güncelleme kullanıcı arabirimini sunma

AIR, varsayılan bir güncelleme arabirimi içerir:

Page 299: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

292ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını güncelleme

Bu arabirim, her zaman kullanıcı bir uygulama sürümünü bilgisayara ilk yüklediğinde kullanılır. Ancak, sonraki

örneklerde kullanmak için kendi arabiriminizi tanımlayabilirsiniz. Bunu yapmak için, yüklenmiş geçerli uygulamaya

ilişkin uygulama tanımlayıcı dosyasında bir customUpdateUI öğesi belirleyin:

<customUpdateUI>true</customUpdateUI>

Uygulama yüklendiğinde ve kullanıcı yüklenen uygulamayla eşleşen, uygulama kimliğine ve yayıncı kimliğine sahip

bir AIR dosyasını açtığında, çalışma zamanı varsayılan AIR uygulama yükleyicisi yerine uygulamayı açar. Daha fazla

bilgi için bkz. “Uygulama güncellemeleri için özel kullanıcı arabirimi sağlama” sayfa 47.

Uygulama, çağrıldığında (NativeApplication.nativeApplication nesnesi bir invoke olayı gönderdiğinde),

uygulamanın güncellenip güncellenmeyeceğine karar verebilir (Updater sınıfını kullanarak). Güncellemeye karar

verirse, kullanıcıya kendi yükleme arabirimini (çalışan standart arabirimden farklı olan) sunabilir.

Kullanıcının bilgisayarına bir AIR dosyası indirme

Updater sınıfını kullanmak için, kullanıcı veya uygulama önce kullanıcının bilgisayarına bir AIR dosyasını yerel olarak

kaydetmelidir. Örneğin, aşağıdaki kod bir URL'den AIR dosyasını

okur(http://example.com/air/updates/Sample_App_v2.air) ve AIR dosyasını uygulama depo dizinine kaydeder:

var urlString:String = "http://example.com/air/updates/Sample_App_v2.air"; var urlReq:URLRequest = new URLRequest(urlString); var urlStream:URLStream = new URLStream(); var fileData:ByteArray = new ByteArray(); urlStream.addEventListener(Event.COMPLETE, loaded); urlStream.load(urlReq); function loaded(event:Event):void { urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); writeAirFile(); } function writeAirFile():void { var file:File = File.applicationStorageDirectory.resolvePath("My App v2.air"); var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.WRITE); fileStream.writeBytes(fileData, 0, fileData.length); fileStream.close(); trace("The AIR file is written."); }

Daha fazla bilgi için bkz. “Dosyaları okuma ve dosyalara yazma için iş akışı” sayfa 111.

Uygulamanın ilk kez çalışıp çalışmadığını görmek için kontrol edin

Uygulamayı güncellediğinizde, kullanıcıya bir "başlarken" veya "hoşgeldiniz" mesajı sunmak isteyebilirsiniz.

Başlatmadan sonra, uygulama mesajın görüntülenip görüntülenmeyeceğini belirlemek için ilk kez çalışıp

çalışmadığını kontrol eder.

Page 300: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

293ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını güncelleme

Bunu yapmanın bir yolu, uygulamanın başlatılmasından sonra uygulama depo dizinine bir dosya kaydetmektir.

Uygulama her başladığında, bu dosyanın mevcudiyetini kontrol etmelidir. Dosya mevcut değilse, uygulama geçerli

kullanıcı için ilk kez çalışmaktadır. Dosya mevcutsa, uygulama önceden en az bir kez çalışmıştır. Dosya mevcutsa ve

geçerli sürüm numarasından daha eski bir sürüm numarası içeriyorsa, kullanıcının yeni sürümü ilk kez çalıştığını

bilirsiniz.

Uygulamanız verileri yerel olarak (örneğin, uygulama depo dizinine) kaydediyorsa, ilk çalıştırmadan sonra önceden

kaydedilmiş veri (önceki sürümlerden) olup olmadığını kontrol etmek isteyebilirsiniz.

Page 301: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

294

Bölüm 33: AIR uygulamalarını yerelleştirme

Adobe® AIR™ 1.1 birden çok dil desteği içerir.

Yerelleştirmeye giriş

Yerelleştirme, birden çok yerel ayarı desteklemek için varlıkları ekleme işlemidir. Yerel ayar, dil ve ülke kodunun

kombinasyonudur. Örneğin en_US Birleşik Devletler'de konuşulan İngilizceyi, fr_FR Fransa'da konuşulan Fransızcayı

belirtir. Bu yerel ayarlar için bir uygulamayı yerelleştirmek üzere iki varlık kümesi sağlarsınız: biri en_US yerel ayarı,

diğeri fr_FR yerel ayarı için.

Yerel ayarlar dilleri paylaşabilir. Örneğin en_US ve en_GB (İngiltere) farklı yerel ayarlardır. Bu durumda her iki yerel

ayar da İngilizce dilini kullanır, ancak ülke kodu onların farklı yerel ayarlar olduğunu ve bu nedenle farklı varlıklar

kullanabileceklerini gösterir. Örneğin en_US yerel ayarındaki bir uygulama "color" kelimesini yazabilir, ancak aynı

kelime en_GB yerel ayarında "colour" şeklindedir. Ayrıca para birimleri yerel ayara bağlı olarak dolar veya pound

biçimindedir ve tarih ve saat formatı da farklı olabilir.

Ayrıca ülke kodunu belirtmeden de bir dil için bir varlık kümesi sağlayabilirsiniz. Örneğin, İngilizce dili için en

varlıkları ve en_US yerel ayarı için de ABD İngilizcesi'ne özgü ek varlıklar sağlayabilirsiniz.

AIR SDK bir HTML Yerelleştirme Çerçevesi (AIRLocalizer.js dosyasında bulunan) sağlar. Bu çerçeve birden çok yerel

ayarla çalışmaya yardımcı olan API'ler içerir. Ayrıntılar için bkz. “HTML içeriğini yerelleştirme” sayfa 295.

Yerelleştirme, uygulamanızda kullanılan dizeleri çevirmenin ötesinde bir işlemdir. Ses dosyaları, görüntüler ve

videolar gibi her tür varlığı içerebilir.

Uygulama yükleyicisindeki uygulama adını ve açıklamasını yerelleştirme

Uygulama tanımlayıcı dosyasındaki name ve description öğeleri için birden çok dil belirtebilirsiniz. Örneğin

aşağıdaki örnek, uygulama adını üç dilde belirtir (İngilizce, Fransızca ve Almanca):

<name> <text xml:lang="en">Sample 1.0</text> <text xml:lang="fr">Échantillon 1.0</text> <text xml:lang="de">Stichprobe 1.0</text>

</name>

Her metin öğesinin xml:lang niteliği, RFC4646'da da (http://www.ietf.org/rfc/rfc4646.txt) tanımlandığı gibi bir dil

kodu belirtir.

Ad öğesi, AIR uygulama yükleyicisinin görüntülediği uygulama adını tanımlar. AIR uygulama yükleyicisi, işletim

sistemi ayarları tarafından belirtilen kullanıcı arabirimi dilleriyle en iyi eşleşen yerelleştirilmiş değeri kullanır.

Benzer şekilde uygulama tanımlayıcı dosyasındaki description öğesinin de çok dilli sürümlerini belirtebilirsiniz. Bu

öğe, AIR uygulama yükleyicisinin görüntülediği açıklama metnini tanımlar.

Page 302: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

295ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

Bu ayarlar yalnızca AIR uygulama yükleyicisinde kullanılabilir olan diller için geçerlidir. Çalışan, yüklü uygulama için

kullanılabilir olan yerel ayarları belirtmez. AIR uygulamaları, AIR uygulama yükleyicisinde kullanılabilir olanlar da

dahil olmak üzere ve bunlara ek olarak birden çok dili destekleyen kullanıcı arabirimleri sağlayabilir.

Daha fazla bilgi için bkz. “Uygulama tanımlayıcı dosyasında özellikleri tanımlama” sayfa 42.

Bir yerel ayar seçme

Uygulamanızın hangi yerel ayarı kullandığını belirlemek için, aşağıdaki yöntemlerden birini kullanabilirsiniz:

• Kullanıcı istemi — Uygulamayı varsayılan bir yerel ayarda başlatıp, ardından kullanıcıdan tercih ettiği yerel ayarı

seçmesini isteyebilirsiniz.

• Capabilities.languages — Capabilities.languages özelliği, işletim sistemi üzerinden ayarlandığı şekilde

kullanıcının tercih edilen dillerinde bulunan dillerin bir dizisini listeler. Dizeler RFC4646

(http://www.ietf.org/rfc/rfc4646.txt) tarafından tanımlanan dil etiketleri içerir (varsa komut ve bölge bilgileri).

Dizeler sınırlayıcı olarak tire kullanır (örneğin "en-US" veya "ja-JP"). Döndürülen dizideki ilk giriş, language

özelliğiyle aynı birincil dil kimliğine sahipti. Örneğin languages[0]"en-US" olarak ayarlıysa, language özelliği

"en" olarak ayarlıdır. Ancak language özelliği "xu" (bilinmeyen bir dili belirtir) olarak ayarlıysa, languages

dizisindeki ilk öğe farklı olur.

• Capabilities.language — Capabilities.language özelliği, işletim sisteminin kullanıcı arabirimi dil kodunu

sağlar. Ancak bu özellik 20 bilinen dille sınırlıdır. İngilizce sistemlerde bu özellik yalnızca dil kodunu döndürür,

ülke kodunu döndürmez. Bu nedenlerden ötürü, Capabilities.languages dizisindeki ilk öğeyi kullanmak daha

yararlıdır.

Flaş içeriğini yerelleştirme

Flash CS3 ve CS4, ActionScript 3.0 bileşenlerinde bir Locale sınıfı içerir. Locale sınıfı sayesinde, bir SWF dosyasının

çok dilli bir metni nasıl görüntülediğini kontrol edebilirsiniz. Flash Dizeler paneli sayesinde, dinamik metin

alanlarında dize sabit değerleri yerine dize kimliklerini kullanabilirsiniz. Bu sayede, dile özgü bir XML dosyasından

yüklenen metni görüntüleyen bir SWF dosyası oluşturabilirsiniz. Locale sınıfını kullanma hakkında bilgi için, bkz.

Flash ActionScript 3.0 Language and Components Reference (ActionScript 3.0 Dil ve Bileşenler Başvurusu).

HTML içeriğini yerelleştirme

AIR 1.1 SDK, bir HTML yerelleştirme çerçevesi içerir. AIRLocalizer.js JavaScript dosyası çerçeveyi tanımlar. AIR

SDK'nin çerçeveler dizini, AIRLocalizer.js dosyasını içerir. Bu dosya, birden çok yerelleştirilmiş sürümü destekleyen

uygulamalar oluşturma konusuna yardımcı olmak için işlevler sağlayan air.Localizer sınıfını içerir.

AIR HTML yerelleştirme çerçevesi kodunu yükleme

Yerelleştirme çerçevesini kullanmak için, AIRLocalizer.js dosyasını projenize kopyalayın. Ardından bu dosyayı bir

komut dosyası etiketi kullanarak uygulamanın ana HTML dosyasına ekleyin:

<script src="AIRLocalizer.js" type="text/javascript" charset="utf-8"></script>

Sonraki JavaScript air.Localizer.localizer nesnesini çağırabilir:

Page 303: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

296ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

<script> var localizer = air.Localizer.localizer;

</script>

air.Localizer.localizer nesnesi, yerelleştirilmiş kaynakları kullanma ve yönetme için yöntemler ve özellikler

tanımlayan tek nesnedir. Localizer sınıfı aşağıdaki yöntemleri içerir:

Localizer sınıfı aşağıdaki statik özellikleri içerir:

Kaynak paketlerini tanımlama

HTML yerelleştirme çerçevesi yerelleştirme dosyalarından dizelerin yerelleştirilmiş sürümlerini okur. Yerelleştirme

dosyası, bir metin dosyasında serileştirilmiş anahtar tabanlı değerlerin bir koleksiyonudur. Yerelleştirme dosyasına

bazen paket de denir.

Uygulama projesi dizininizin locale (yerel ayar) adlı bir alt dizinini oluşturun. (Farklı bir ad da kullanabilirsiniz, bkz.

“AIR HTML Localizer ayarlarını özelleştirme” sayfa 299.) Bu dizin yerelleştirme dosyalarını içerir. Bu dizin paketler

dizini olarak bilinir.

Uygulamanızın desteklediği her yerel ayar için, paketler dizininin bir alt dizinini oluşturun. Her alt dizini yerel ayar

koduyla eşleşecek şekilde adlandırın. Örneğin French (Fransız) alt dizinini “fr” ve English (İngiliz) alt dizinini “en”

olarak adlandırın. Dil ve ülke kodu olan bir yerel ayarı tanımlamak için alt çizgi (_) karakterini kullanabilirsiniz.

Örneğin U.S. English (Amerikan İngilizcesi) dizinini “en_us” olarak adlandırın. (Alternatif olarak alt çizgi yerine, “en-

us” örneğinde olduğu gibi tire de kullanabilirsiniz. HTML yerelleştirme çerçevesi her ikisini de destekler.)

Bir yerel ayar alt dizinine istediğiniz sayıda kaynak dosya ekleyebilirsiniz. Genellikle her dil için bir yerelleştirme

dosyası oluşturursunuz (ve dosyayı ilgili dilin dizinine yerleştirirsiniz). HTML yerelleştirme çerçevesi, bir dosyanın

içeriğini okumanızı sağlayan bir getFile() yöntemi içerir (bkz. “Belirli yerel ayarlar için kaynak alma” sayfa 301.

Yöntem Açıklama

getFile() Belirli bir yerel ayar için belirtilen kaynak paketinin metnini alır. Bkz. “Belirli yerel ayarlar için kaynak alma”

sayfa 301.

getLocaleChain() Dilleri yerel ayar zincirinde döndürür. Bkz. “Yerel ayar zincirini tanımlama” sayfa 300.

getString() Bir kaynak için tanımlı olan dizeyi alır. Bkz. “Belirli yerel ayarlar için kaynak alma” sayfa 301.

setBundlesDirectory()

Paket dizini konumunu ayarlar. Bkz. “AIR HTML Localizer ayarlarını özelleştirme” sayfa 299.

setLocalAttributePrefix()

HTML DOM öğelerinde kullanılan yerelleştirici nitelikleri tarafından kullanılan öneki ayarlar. Bkz. “AIR HTML

Localizer ayarlarını özelleştirme” sayfa 299

setLocaleChain() Yerel ayar zincirinde dillerin sırasını ayarlar. Bkz. “Yerel ayar zincirini tanımlama” sayfa 300.

sortLanguagesByPreference()

Yerel ayar zincirindeki yerel ayarları, işletim sistemi ayarlarındaki yerel ayar sırasına bağlı olarak sıralar. Bkz.

“Yerel ayar zincirini tanımlama” sayfa 300.

update() HTML DOM'yi (veya bir DOM öğesini) geçerli yerel ayar zincirindeki yerelleştirilmiş dizelerle günceller. Yerel

ayar zinciriyle ilgili bilgi için, bkz. “Yerel ayar zincirlerini yönetme” sayfa 297. update() yöntemi hakkında

daha fazla bilgi için, bkz. “DOM öğelerini geçerli yerel ayarı kullanmak üzere güncelleme” sayfa 298.

Özellik Açıklama

localizer Uygulama için tek Localizer nesnesine bir başvuru döndürür.

ultimateFallbackLocale Uygulama hiçbir kullanıcı tercihini desteklemediğinde kullanılan yerel ayar. Bkz.

“Yerel ayar zincirini tanımlama” sayfa 300.

Page 304: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

297ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

.properties dosya uzantısına sahip dosyalar, yerelleştirme özellik dosyaları olarak bilinir. Bir yerel ayar için anahtar

değer çiftleri tanımlamak üzere onları kullanabilirsiniz. Özellikler dosyası, her satırda bir dize değeri tanımlar.

Örneğin aşağıdaki örnekte dize değeri "Hello in English."greeting adlı anahtar için tanımlanır:

greeting=Hello in English.

Aşağıdaki metni içeren bir özellikler dosyası, altı anahtar değer çifti tanımlar:

title=Sample Application greeting=Hello in English. exitMessage=Thank you for using the application. color1=Red color2=Green color3=Blue

Bu örnek özellikler dosyasının, en dizininde saklanacak olan İngilizce sürümünü gösterir.

Bu Özellikler dosyasının Fransızca sürümü fr dizinine konur.

title=Programme d'échantillon greeting=Bonjour en français. exitMessage=Merci pour l'usage du programme. color1=Rouge color2=Vert color3=Bleu

Farklı bilgi türleri için birden fazla kaynak dosya tanımlayabilirsiniz. Örneğin bir legal.properties dosyası yasal ortak

metin içerebilir (telif hakkı bilgileri gibi). Bu kaynağı birden fazla uygulamada tekrar kullanmak isteyebilirsiniz. Benzer

şekilde, kullanıcı arabiriminin farklı kısımları için yerelleştirilmiş içerik tanımlayan ayrı dosyalar tanımlayabilirsiniz.

Bu dosyalarda, birden fazla dili desteklemek için UTF-8 kodlaması kullanın.

Yerel ayar zincirlerini yönetme

Uygulamanız AIRLocalizer.js dosyasını yüklediğinde, uygulamanızda tanımlı olan yerel ayarları inceler. Bu yerel

ayarlar, paketler dizininin alt dizinlerine karşılık gelir (bkz. “Kaynak paketlerini tanımlama” sayfa 296). Kullanılabilir

yerel ayarların listesi yerel ayar zinciri olarak bilinir. AIRLocalizer.js dosyası yerel ayar zincirini, işletim sistemi ayarları

tarafından tanımlanmış tercih edilen sırayı temel alarak sıralar. (Capabilities.languages özelliği, işletim sistemi

kullanıcı arabirimi dillerini tercih edilen sırada listeler.)

Dolayısıyla bir uygulama "en", "en_US" ve "en_UK" yerel ayarları için kaynak tanımlarsa, AIR HTML Localizer

çerçevesi yerel ayar zincirini uygun şekilde sıralar. Bir uygulama "en" öğesini birincil yerel ayar olarak bildiren bir

sistemde başladığında, yerel ayar zinciri ["en", "en_US", "en_UK"] şeklinde sıralanır. Bu durumda uygulama

kaynakları önce "en" paketinde, sonra "en_US" paketinde arar.

Ancak sistem "en-US" öğesini birincil yerel ayar olarak bildirirse, sıralama ["en_US", "en", en_UK"] şeklindedir.

Bu durumda uygulama kaynakları önce "en_US" paketinde, sonra "en" paketinde arar.

Varsayılan olarak uygulama yerel ayar zincirindeki ilk yerel ayarı, kullanılacak varsayılan yerel ayar olarak tanımlar.

Uygulamayı ilk kez çalıştırdıktan sonra kullanıcıdan bir yerel ayar seçmesini isteyebilirsiniz. Ardından seçimi bir

tercihler dosyasında saklamayı ve uygulamanın bir sonraki başlatılışında bu yerel ayarı kullanmayı seçebilirsiniz.

Uygulamanız kaynak dizeleri yerel ayar zincirindeki herhangi bir yerel ayarda kullanabilir. Belirli bir yerel ayar bir

kaynak dize tanımlamazsa, uygulama, yerel ayar zincirinde tanımlı olan diğer yerel ayarlar için bir sonraki eşleşen

kaynak dizeyi kullanır.

Localizer nesnesinin setLocaleChain() yöntemini çağırarak yerel ayar zincirini özelleştirebilirsiniz. Bkz. “Yerel ayar

zincirini tanımlama” sayfa 300.

Page 305: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

298ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

DOM öğelerini yerelleştirilmiş içerikle güncelleme

Uygulamadaki bir öğe, yerelleştirme özellikleri dosyasındaki bir anahtar değere başvurabilir. Örneğin aşağıdaki

örnekte bulunan title öğesi, bir local_innerHTML niteliğini belirtir. Yerelleştirme çerçevesi, yerelleştirilen bir

değeri aramak için bu niteliği kullanır. Çerçeve varsayılan olarak "local_" ile başlayan nitelik adları arar. Çerçeve,

"local_" ifadesinin arkasından gelen metinle eşleşen adlara sahip nitelikleri günceller. Bu durumda çerçeve, title

öğesinin innerHTML niteliğini ayarlar. innerHTML niteliği, varsayılan özellikler dosyasındaki (default.properties)

mainWindowTitle anahtarı için tanımlı olan değeri kullanır:

<title local_innerHTML="default.mainWindowTitle"/>

Geçerli yerel ayar eşleşen bir değer tanımlamazsa, yerelleştirici çerçevesi yerel ayar zincirinin kalanını arar. Yerel ayar

zincirinde bir değerin tanımlı olduğu bir sonraki yerel ayarı kullanır.

Aşağıdaki örnekte p öğesinin metni (innerHTML niteliği), varsayılan özellikler dosyasında tanımlanan greeting

anahtarının değerini kullanır:

<p local_innerHTML="default.greeting" />

Aşağıdaki örnekte, input öğesinin değer niteliği (ve görüntülenen metin), varsayılan özellikler dosyasında tanımlanan

btnBlue anahtarının değerini kullanır:

<input type="button" local_value="default.btnBlue" />

HTML DOM'yi geçerli yerel ayar zincirinde tanımlı olan dizeleri kullanmak üzere güncellemek için, Localizer

nesnesinin update() yöntemini çağırın. update() yöntemini çağırmak Localizer nesnesinin DOM'yi ayrıştırmasına

ve yerelleştirme ("local_...") niteliklerini bulduğu konumda işlemeleri uygulamasına neden olur:

air.Localizer.localizer.update();

Hem bir nitelik ("innerHTML" gibi) hem de karşılık gelen yerelleştirme niteliği için ("local_innerHTML" gibi) değer

tanımlayabilirsiniz. Bu durumda yerelleştirme çerçevesi, yerelleştirme zincirinde karşılık gelen bir değer bulursa,

yalnızca nitelik değerinin üzerine yazar. Örneğin aşağıdaki öğe hem value hem de local_value niteliklerini

tanımlar:

<input type="text" value="Blue" local_value="default.btnBlue"/>

Yalnızca belirli bir DOM öğesini de güncelleyebilirsiniz. Bir sonraki bölüm olan “DOM öğelerini geçerli yerel ayarı

kullanmak üzere güncelleme” sayfa 298 bölümüne bakın.

AIR HTML Localizer "local_" ifadesini varsayılan olarak bir öğenin yerelleştirme ayarlarını tanımlayan nitelikler

için önek olarak kullanır. Örneğin local_innerHTML niteliği varsayılan olarak bir öğenin innerHTML değeri için

kullanılan paket ve kaynak adını tanımlar. Ayrıca local_value niteliği varsayılan olarak bir öğenin value niteliği için

kullanılan paket ve kaynak adını da tanımlar. Localizer öğesini "local_" dışında bir nitelik öneki kullanmak üzere

yapılandırabilirsiniz. Bkz. “AIR HTML Localizer ayarlarını özelleştirme” sayfa 299.

DOM öğelerini geçerli yerel ayarı kullanmak üzere güncelleme

Localizer nesnesi HTML DOM'yi güncellediğinde, işaretli öğelerin, geçerli yerel ayar zincirinde tanımlı dizelere dayalı

olan nitelik değerlerini kullanmasına neden olur. HTML yerelleştiricisinin HTML DOM'yi güncellemesi için,

Localizer nesnesinin update() yöntemini çağırın:

air.Localizer.localizer.update();

Yalnızca belirtilen bir DOM öğesini güncellemek için, update() yöntemine bir parametre olarak iletin. update()

yöntemi yalnızca parentNode adlı, isteğe bağlı bir parametreye sahiptir. parentNode parametresi belirtildiğinde,

yerelleştirilecek DOM öğesini tanımlar. update() yöntemini çağırmak ve bir parentNode parametresi belirtmek,

yerelleştirme niteliklerini belirten tüm alt öğeler için yerelleştirilen değerleri ayarlar.

Page 306: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

299ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

Örneğin aşağıdaki div öğesine bakın:

<div id="colorsDiv"> <h1 local_innerHTML="default.lblColors" ></h1> <p><input type="button" local_value="default.btnBlue" /></p> <p><input type="button" local_value="default.btnRed" /></p> <p><input type="button" local_value="default.btnGreen" /></p>

</div>

Bu öğeyi geçerli yerel ayar zincirinde tanımlı yerelleştirilmiş dizeleri kullanmak üzere güncellemek için, aşağıdaki

JavaScript kodunu kullanın:

var divElement = window.document.getElementById("colorsDiv"); air.Localizer.localizer.update(divElement);

Yerel ayar zincirinde bir anahtar değer bulunmazsa, yerelleştirme çerçevesi nitelik değerini "local_" niteliğinin

değerine ayarlar. Örneğin bir önceki örnekte, yerelleştirme çerçevesinin lblColors anahtarı için bir değer

bulamadığını varsayın (yerel ayar zincirindeki hiçbir default.properties dosyasında). Bu durumda innerHTML değeri

olarak "default.lblColors" öğesini kullanır. Bu değeri kullanmak eksik kaynaklar olduğunu (geliştiriciye) belirtir.

update() yöntemi, yerel ayar zincirinde kaynak bulamadığında bir resourceNotFound olayı gönderir.

air.Localizer.RESOURCE_NOT_FOUND sabiti, "resourceNotFound" dizesini tanımlar. Olayın üç özelliği vardır:

bundleName, resourceName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. resourceName

özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak bulunamayan yerel ayarın adıdır.

update() yöntemi, belirtilen paketi bulamadığında bir bundleNotFound olayı gönderir.

air.Localizer.BUNDLE_NOT_FOUND sabiti, "bundleNotFound" dizesini tanımlar. Olayın iki özelliği vardır:

bundleName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak

bulunamayan yerel ayarın adıdır.

update() yöntemi senkronize olmayan bir şekilde çalışır (ve resourceNotFound ve bundleNotFound olaylarını

senkronize olmayan bir şekilde gönderir). Aşağıdaki kod resourceNotFound ve bundleNotFound olayları için olay

dinleyicilerini ayarlar:

air.Localizer.localizer.addEventListener(air.Localizer.RESOURCE_NOT_FOUND, rnfHandler); air.Localizer.localizer.addEventListener(air.Localizer.BUNDLE_NOT_FOUND, rnfHandler); air.Localizer.localizer.update(); function rnfHandler(event) {

alert(event.bundleName + ": " + event.resourceName + ":." + event.locale); } function bnfHandler(event) {

alert(event.bundleName + ":." + event.locale); }

AIR HTML Localizer ayarlarını özelleştirme

Localizer nesnesinin setBundlesDirectory() yöntemi sayesinde paketlerin dizin yolunu özelleştirebilirsiniz.

Localizer nesnesinin setLocalAttributePrefix() yöntemi sayesinde paketlerin dizin yolunu ve Localizer

tarafından kullanılan nitelik değerini özelleştirebilirsiniz.

Page 307: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

300ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

Varsayılan paketler dizini, uygulama dizininin yerel ayar alt dizini olarak tanımlanır. Localizer nesnesinin

setBundlesDirectory() yöntemini çağırarak başka bir dizin de belirtebilirsiniz. Bu yöntem için path adlı bir

parametre gereklidir, bu parametre, bir dize olarak istenilen paketler dizinine giden yoldur. path parametresinin

değeri şunlardan biri olabilir:

• "locales" gibi, uygulama dizinine göreceli bir yol tanımlayan bir Dize

• "app://languages" gibi, app, app-storage veya file URL şemalarını kullanan geçerli bir URL tanımlayan bir

Dize (http URL şemasını kullanmayın)

• Bir File nesnesi

URL'ler ve dizin yolları hakkında bilgi için, bkz. “File nesnelerinin Yolları” sayfa 98.

Örneğin aşağıdaki kod paketler dizinini, uygulama depolama dizininin (uygulama dizininin değil) diller alt dizinine

ayarlar:

air.Localizer.localizer.setBundlesDirectory("languages");

path parametresi olarak geçerli bir yol iletin. Aksi takdirde yöntem bir BundlePathNotFoundError istisnası atar.

Hatanın name özelliği "BundlePathNotFoundError" öğesidir ve message özelliği geçersiz yolu belirtir.

AIR HTML Localizer "local_" ifadesini varsayılan olarak bir öğenin yerelleştirme ayarlarını tanımlayan nitelikler

için önek olarak kullanır. Örneğin local_innerHTML niteliği, aşağıdaki input öğesinin innerHTML değeri için

kullanılan paket ve kaynak adını tanımlar:

<p local_innerHTML="default.greeting" />

Localizer nesnesinin setLocalAttributePrefix() yöntemi sayesinde, "local_" dışında bir nitelik öneki

kullanabilirsiniz. Bu statik yöntem için, nitelik öneki olarak kullanmak istediğiniz dize olan bir parametre gereklidir.

Örneğin aşağıdaki kod, yerelleştirme çerçevesini, "loc_" ifadesini nitelik öneki olarak kullanmak üzere ayarlar:

air.Localizer.localizer.setLocalAttributePrefix("loc_");

Yerelleştirme çerçevesinin kullandığı nitelik önekini özelleştirebilirsiniz. Varsayılan değer ("local_"), kodunuzun

kullandığı başka bir nitelikle çakışıyorsa, öneki özelleştirmek isteyebilirsiniz. Bu yöntemi çağırırken, HTML nitelikleri

için geçerli karakterler kullandığınızdan emin olun. (Örneğin değer boşluk karakteri içermemelidir.)

Yerelleştirme niteliklerini HTML öğelerinde kullanma hakkında bilgi için, bkz. “DOM öğelerini yerelleştirilmiş

içerikle güncelleme” sayfa 298.

Paketler dizini ve nitelik öneki ayarları, farklı uygulama oturumları arasında kalıcı değildir. Özel paketler dizini veya

nitelik öneki ayarı kullanıyorsanız, uygulama her başladığında ayarı yeniden yaptığınızdan emin olun.

Yerel ayar zincirini tanımlama

AIRLocalizer.js kodunu yüklediğinizde, varsayılan olarak varsayılan yerel ayar zincirini ayarlar. Paketler dizininde ve

işletim sistemi dil ayarlarında bulunan yerel ayarlar, bu yerel ayar zincirini tanımlar. (Ayrıntılar için bkz. “Yerel ayar

zincirlerini yönetme” sayfa 297.)

Localizer nesnesinin statik setLocaleChain() yöntemini çağırarak, yerel ayar zincirini değiştirebilirsiniz. Örneğin,

kullanıcı belirli bir dil için bir tercih belirtirse, bu yöntemi çağırmak isteyebilirsiniz. setLocaleChain() yöntemi için

chain adlı bir parametre gereklidir, bu parametre ["fr_FR","fr","fr_CA"] gibi bir yerel ayarlar dizisidir. Yerel

ayarların dizideki sırası, çerçevenin kaynak arama sırasını belirler (sonraki işlemlerde). Zincirdeki ilk yerel ayar için

kaynak bulunmazsa, diğer yerel ayarların kaynaklarına bakmaya devam eder. chain argümanı eksikse, bir dizi değilse

veya boş bir diziyse, işlev başarısız olur ve bir IllegalArgumentsError istisnası atar.

Localizer nesnesinin statik getLocaleChain() yöntemi, geçerli yerel ayar zincirindeki yerel ayarları listeleyen bir Dizi

döndürür.

Page 308: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

301ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

Aşağıdaki kod geçerli yerel ayar zincirini okur ve zincirin başına iki Fransız yerel ayar ekler:

var currentChain = air.Localizer.localizer.getLocaleChain(); newLocales = ["fr_FR", "fr"]; air.Localizer.localizer.setLocaleChain(newLocales.concat(currentChain));

setLocaleChain() yöntemi yerel ayar zincirini güncellediğinde bir "change" olayı gönderir.

air.Localizer.LOCALE_CHANGE sabiti, "change" dizesini tanımlar. Olayın localeChain adlı bir özelliği vardır, bu,

yeni yerel ayar zincirindeki yerel ayar kodlarının bir dizisidir. Aşağıdaki kod bu olay için bir olay dinleyicisi ayarlar:

var currentChain = air.Localizer.localizer.getLocaleChain(); newLocales = ["fr_FR", "fr"]; localizer.addEventListener(air.Localizer.LOCALE_CHANGE, changeHandler); air.Localizer.localizer.setLocaleChain(newLocales.concat(currentChain)); function changeHandler(event) {

alert(event.localeChain); }

Statik air.Localizer.ultimateFallbackLocale özelliği, uygulama hiçbir kullanıcı tercihini desteklemediğinde

kullanılan yerel ayarı temsil eder. Varsayılan olarak "en" değerindedir. Aşağıdaki kodda gösterildiği gibi, başka bir

yerel ayara ayarlayabilirsiniz:

air.Localizer.ultimateFallbackLocale = "fr";

Belirli yerel ayarlar için kaynak alma

Localizer nesnesinin getString() yöntemi, belirli bir yerel ayardaki kaynak için tanımlı olan dizeyi döndürür.

Yöntemi çağırırken bir locale değeri belirtmeniz gerekmez. Bu durumda yöntem yerel ayar zincirinin tamamına

bakar ve belirli kaynak adını sağlayan ilk yerel ayardaki dizeyi döndürür. Bu yöntem aşağıdaki parametrelere sahiptir:

Yerelleştirme çerçevesi işaretli HTML DOM niteliklerini güncelleyebilir. Ancak yerelleştirilmiş dizeleri başka

şekillerde kullanabilirsiniz. Örneğin bir dizeyi dinamik olarak oluşturulmuş bir HTML'de veya bir işlev çağrısında

parametre değeri olarak kullanabilirsiniz. Örneğin aşağıdaki kod alert() işlevini, fr_FR yerel ayarının varsayılan

özellikler dosyasındaki error114 kaynağında tanımlı olan dizeyle çağırır.

alert(air.Localizer.localizer.getString("default", "error114", null, "fr_FR"));

Parametre Açıklama

bundleName Kaynağı içeren paket. Bu, .properties uzantısı olmadan özellikler dosyasının dosya

adıdır. (Örneğin bu parametre "alerts" olarak ayarlanırsa, Localizer kodu

alerts.properties adlı yerelleştirme dosyalarına bakar.

resourceName Kaynak adı.

templateArgs İsteğe bağlı. Değiştirme dizesindeki numaralı etiketleri değiştirmek için dize dizisi

Örneğin templateArgs parametresinin ["Raúl", "4"] ve eşleşen kaynak

dizenin "Hello, {0}. You have {1} new messages.". olduğu bir işleve

yapılacak çağrıyı düşünün. Bu durumda işlev şunu döndürür: "Hello, Raúl. You have 4 new messages.". Bu ayarı yoksaymak için, bir null değeri iletin.

locale İsteğe bağlı. Kullanılacak yerel ayar kodu ("en", "en_us" veya "fr" gibi). Bir

yerel ayar sağlanmışsa ve eşleşen değer bulunmazsa, yöntem değerleri yerel ayar

zincirindeki diğer yerel ayarlarda aramaya devam etmez. Yerel kod

belirtilmemişse işlev, belirli kaynak adı için bir değer sağlayan yerel ayar

zincirindeki ilk yerel ayardaki dizeyi döndürür.

Page 309: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

302ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

getString() yöntemi, kaynağı belirtilen pakette bulamadığında bir resourceNotFound olayı gönderir.

air.Localizer.RESOURCE_NOT_FOUND sabiti, "resourceNotFound" dizesini tanımlar. Olayın üç özelliği vardır:

bundleName, resourceName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. resourceName

özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak bulunamayan yerel ayarın adıdır.

getString() yöntemi, belirtilen paketi bulamadığında bir bundleNotFound olayı gönderir.

air.Localizer.BUNDLE_NOT_FOUND sabiti, "bundleNotFound" dizesini tanımlar. Olayın iki özelliği vardır:

bundleName ve locale. bundleName özelliği, kaynak bulunamayan paketin adıdır. locale özelliği, kaynak

bulunamayan yerel ayarın adıdır.

getString() yöntemi senkronize olmayan bir şekilde çalışır (ve resourceNotFound ve resourceNotFound

olaylarını senkronize olmayan bir şekilde gönderir). Aşağıdaki kod resourceNotFound ve bundleNotFound olayları

için olay dinleyicilerini ayarlar:

air.Localizerlocalizer.addEventListener(air.Localizer.RESOURCE_NOT_FOUND, rnfHandler); air.Localizerlocalizer.addEventListener(air.Localizer.BUNDLE_NOT_FOUND, bnfHandler); var str = air.Localizer.localizer.getString("default", "error114", null, "fr_FR"); function rnfHandler(event) {

alert(event.bundleName + ": " + event.resourceName + ":." + event.locale); } function bnfHandler(event) {

alert(event.bundleName + ":." + event.locale); }

Localizer nesnesinin getFile() yöntemi, belirli bir yerel ayar için bir paketin içeriğini dize olarak döndürür. Paket

dosyası UTF-8 dosyası olarak okunur. Bu yöntem aşağıdaki parametreleri içerir:

Örneğin aşağıdaki kod, fr yerel ayarının about.html dosyasının içeriğini kullanarak document.write() yöntemini

çağırır:

var aboutWin = window.open(); var aboutHtml = localizer.getFile("about.html", null, "fr"); aboutWin.document.close(); aboutWin.document.write(aboutHtml);

Parametre Açıklama

resourceFileName Kaynak dosyanın dosya adı ("about.html" gibi).

templateArgs İsteğe bağlı. Değiştirme dizesindeki numaralı etiketleri değiştirmek için dize dizisi

Örneğin templateArgs parametresinin ["Raúl", "4"] olduğu ve eşleşen

kaynak dizenin iki satır içerdiği bir işleve yapılacak çağrıyı düşünün:

<html> <body>Hello, {0}. You have {1} new messages.</body> </html>

Bu durumda işlev iki satırlı bir dize döndürür:

<html> <body>Hello, Raúl. You have 4 new messages. </body> </html>

locale Kullanılacak yerel ayar, örneğin "en_GB" gibi. Bir yerel ayar sağlanmışsa ve

eşleşen dosya bulunmazsa, yöntem yerel ayar zincirindeki diğer yerel ayarlarda

aramaya devam etmez. Hiçbir yerel kod belirtilmemişse işlev,

resourceFileName öğesiyle eşleşen bir dosyaya sahip olan yerel ayar

zincirindeki ilk yerel ayardaki metni döndürür.

Page 310: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

303ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

AIR uygulamalarını yerelleştirme

getFile() yöntemi, yerel ayar zincirinde kaynak bulamadığında bir fileNotFound olayı gönderir.

air.Localizer.FILE_NOT_FOUND sabiti, "resourceNotFound" dizesini tanımlar. getFile() yöntemi senkronize

olmayan bir şekilde çalışır (ve fileNotFound olayını senkronize olmayan bir şekilde gönderir). Olayın iki özelliği

vardır: fileName ve locale. fileName özelliği, bulunamayan dosyanın adıdır. locale özelliği, kaynak bulunamayan

yerel ayarın adıdır. Aşağıdaki kod bu olay için bir olay dinleyicisi ayarlar:

air.Localizer.localizer.addEventListener(air.Localizer.FILE_NOT_FOUND, fnfHandler); air.Localizer.localizer.getFile("missing.html", null, "fr"); function fnfHandler(event) {

alert(event.fileName + ": " + event.locale); }

Tarihleri, saatleri ve para birimlerini yerelleştirme

Uygulamaların tarihi, saati ve para birimini sunma şekli her yerel ayar için birbirinden oldukça farklıdır. Örneğin

tarihler için ABD standardı ay/gün/yıl, Avrupa için tarihleri sunma şekliyse gün/ay/yıl şeklindedir.

Tarihleri, saatleri ve para birimlerini formatlamak için kod yazabilirsiniz. Örneğin aşağıdaki kod bir Date nesnesini

ay/gün/yıl veya gün/ay/yıl formatına dönüştürür. locale değişkeni (yerel ayarı temsil eden) "en_US" olarak ayarlıysa,

işlev ay/gün/yıl formatını döndürür. Örnek bir Date nesnesini tüm diğer yerel ayarlar için gün/ay/yıl formatına

dönüştürür:

function convertDate(date) {

if (locale == "en_US") {

return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear(); } else {

return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear(); }

}

Page 311: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

304

Bölüm 34: Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Adobe® AIR™ komut satırı araçları sayesinde Adobe AIR uygulamalarını test edebilir ve paketleyebilirsiniz. Bu araçları

ayrıca otomatikleştirilmiş oluşturma işlemlerinde de kullanabilirsiniz. AIR komut satırı araçları AIR SDK

(http://www.adobe.com/go/learn_air_download_AIRSDK_tr) adresinde bulunmaktadır.

AIR Hata Ayıklama Başlatıcısı'nı (ADL) Kullanma

AIR Hata Ayıklama Başlatıcısı'nı (ADL) geliştirme sırasında hem SWF tabanlı hem de HTML tabanlı uygulamaları

çalıştırmak için kullanın. ADL kullanarak bir uygulamayı paketlemeden ve yüklemeden çalıştırabilirsiniz. Varsayılan

olarak ADL, SDK'ye dahil olan bir çalışma zamanı kullanır, yani ADL'yi kullanmak için çalışma zamanını ayrı olarak

yüklemeniz gerekmez.

ADL, izleme ifadelerini ve çalışma zamanı hatalarını standart çıktıya yazdırır, ancak kesme noktalarını veya diğer hata

ayıklama özelliklerini desteklemez. SWF tabanlı bir uygulama geliştiriyorsanız, karmaşık hata ayıklama konularında

Flash Hata Ayıklayıcı (veya Flash CS3 ya da CS4) kullanın.

Bir uygulamayı ADL ile başlatma

Aşağıdaki sözdizimini kullanın:

adl [-runtime runtime-directory] [-pubid publisher-id] [-nodebug] application.xml [root-directory] [-- arguments]

-runtime runtime-directory Kullanılacak çalışma zamanını içeren dizini belirtir. Belirtilmemişse, ADL programıyla

aynı SDK'de bulunan çalışma zamanı dizini kullanılır. ADL'i SDK klasöründen taşırsanız, çalışma zamanı dizinini

belirtmeniz gerekir. Windows'ta, Adobe AIR dizinini içeren dizini belirtin. Mac OS X'te, Adobe AIR.framework

içeren dizini belirtin.

-pubid publisher-id Bu çalıştırma için AIR uygulamasının yayıncı kimliği olarak belirtilen değeri atar. Geçici bir

yayıncı belirlemek, yerel bağlantı üzerinden iletişim kurma gibi, bir uygulamanın benzersiz olarak tanımlanmasına

yardımcı olan yayıncı kimliğini kullanan AIR uygulaması özellliklerini test etmenizi sağlar. Son yayıncı kimliği, AIR

yükleme dosyasını imzalamak için kullanılan dijital sertifika tarafından belirlenir.

-nodebug Hata ayıklama desteğini kapatır. Kullanılırsa, uygulama işlemi Flash hata ayıklayıcıya bağlanamaz ve

işlenmeyen istisnaların iletişim kutuları bastırılır. İzleme ifadeleri konsol penceresine yazdırılmaya devam edilir. Hata

ayıklamayı kapatma uygulamanızın biraz daha hızlı çalışmasını sağlar ve ayrıca yüklenmiş bir uygulamanın çalışma

modunu daha dikkatle taklit eder.

application.xml Uygulama tanımlayıcı dosya. Bkz. “AIR uygulamasının özelliklerini ayarlama” sayfa 41.

root-directory Uygulamanın çalıştırılacak kök dizinini belirtir. Belirtilmemişse, uygulama tanımlayıcı dosyasını

içeren dizin kullanılır.

-- arguments "--" karakterlerinden sonra gelen tüm karakter dizeleri uygulamaya komut satırı argümanları olarak

iletilir.

Not: Zaten çalışmakta olan bir AIR uygulamasını başlattığınızda, bu uygulamanın yeni bir örneği başlatılmaz. Bunun

yerine çalışan örneğe bir invoke olayı gönderilir.

Page 312: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

305ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

İzleme ifadelerini yazdırma

İzleme ifadelerini ADL'yi çalıştırmak için kullanılan konsola yazdırmak için, izleme ifadelerini trace() işleviyle

kodunuza ekleyin:

trace("debug message"); air.trace("debug message");

ADL Örnekleri

Geçerli dizinde bir uygulama çalıştırın:

adl myApp-app.xml

Geçerli dizinin alt dizininde bir uygulama çalıştırın:

adl source/myApp-app.xml release

Bir uygulama çalıştırın ve "tick" ve "tock" olmak üzere iki komut satırını iletin:

adl myApp-app.xml -- tick tock

Belirli bir çalışma zamanını kullanarak bir uygulama çalıştırın:

adl -runtime /AIRSDK/runtime myApp-app.xml

Flash Hata Ayıklayıcı'ya (FDB) Bağlanma

SWF tabanlı bir AIR uygulamasının hatalarını Flash Hata Ayıklayıcı'yla ayıklamak için, bir FDB oturumu başlatın ve

daha sonra uygulamanızın hata ayıklama sürümünü başlatın. SWF dosyasının hata ayıklama sürümü otomatik olarak

dinleyen bir FDB oturumuna bağlanır.

1 FDB'yi başlatın. FDB programı, Flex SDK klasörünüzün bin dizininde bulunabilir.

Konsol, FDB istemini görüntüler: <fdb>

2 Çalıştır komutunu çalıştırın: <fdb>run [Enter]

3 Farklı bir komut veya kabuk konsolunda, uygulamanızın hata ayıklama sürümünü başlatın:

adl myApp-debug.xml

4 FDB komutlarını kullanarak kesme noktalarını istenilen şekilde oluşturun.

5 Yazın: continue [Enter]

ADL çıkış ve hata kodları

Aşağıdaki tablo, ADL tarafından yazdırılan çıkış kodlarını açıklamaktadır:

Çıkış kodu Açıklama

0 Başarılı başlatma. ADL, AIR uygulaması çıktıktan sonra çıkar.

1 Zaten çalışmakta olan AIR uygulamasını başarılı bir şekilde başlatma. ADL hemen çıkar.

2 Kullanım hatası. ADL'ye verilen argümanlar yanlış.

3 Çalışma zamanı bulunamadı.

4 Çalışma zamanı başlatılamadı. Bunun nedeni genellikle uygulamada belirtilen sürümün veya yama

düzeyinin, çalışma zamanının sürümü veya yama düzeyiyle eşleşmemesidir.

Page 313: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

306ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

AIR yükleme dosyasını AIR Geliştirici Aracı (ADT) kullanarak paketleme

AIR yükleme dosyasını hem SWF tabanlı hem de HTML tabanlı AIR uygulamalarınız için AIR Geliştirici Aracı'nı

(ADT) kullanarak oluşturursunuz. (Uygulamanızı oluşturmak için Adobe Flash CS3 kullanıyorsanız, AIR paketini

oluşturmak için Komutlar menüsündeki AIR Dosyası Oluştur komutunu da kullanabilirsiniz. Daha fazla bilgi için,

bkz. “Flash CS3 Professional için Adobe AIR Güncellemesi” sayfa 13. Flash CS4 kullanıyorsanız, Dosya > AIR

Ayarları'nı seçin. Daha fazla bilgi için, Flash Uygulamasını Kullanma bölümündeki Adobe AIR için Yayınlama

konusunu inceleyin.)

ADT, komut satırından veya Ant gibi bir oluşturma aracından çalıştırabileceğiniz bir Java programıdır. AIR ve Flex

SDK'ler, Java programını sizin için çalıştıran komut satırı dosyaları içerir.

AIR yükleme dosyasını paketleme

Her AIR uygulaması, en az bir uygulama tanımlayıcı dosyasına ve ana SWF veya HTML dosyasına sahip olmalıdır.

Diğer yüklenen uygulama varlıkları da AIR dosyasında paketlenmelidir.

Tüm AIR yükleyici dosyaları dijital sertifika kullanılarak imzalanmalıdır. AIR yükleyici, imzayı, uygulama dosyanızda

siz imzaladıktan sonra değişiklik yapılmadığını doğrulamak için kullanır. VeriSign veya Thawte gibi bir sertifika

yetkilisinden kod imzalayıcı sertifikası veya kendinden imzalı bir sertifika kullanabilirsiniz. Güvenilen bir sertifika

yetkilisi tarafından yayımlanan sertifika, uygulamanızın kullanıcılarına yayıncı olarak kimliğinize ilişkin bir güvence

sağlar. Kendinden imzalı bir sertifika, imzalayan olarak kimliğinizi doğrulamada kullanılamaz. Ayrıca bu olumsuzluk

paketin değiştirilmediği yönündeki güvenceyi de zayıflatır, çünkü meşru bir yükleme dosyası kullanıcıya ulaşmadan

önce sahtesiyle değiştirilmiş olabilir.

ADT -package komutunu kullanarak bir AIR dosyasını tek adımda paketleyebilir ve imzalayabilirsiniz. Ayrıca -

prepare komutuyla ara, imzalanmamış bir paket oluşturabilirsiniz ve ara paketi ayrı bir adımda -sign komutuyla

imzalayabilirsiniz.

Yükleme paketini imzalarken, ADT, zamanı doğrulamak için otomatik olarak bir zaman damgası yetkili sunucusuna

başvurur. Zaman damgası bilgileri AIR dosyasında bulunmaktadır. Doğrulanmış bir zaman damgası içeren AIR

dosyası, ileride herhangi bir zamanda yüklenebilir. ADT zaman damgası sunucusuna ulaşamazsa, paketleme iptal

edilir. Zaman damgalama seçeneğini geçersiz kılabilirsiniz, ancak zaman damgası olmadan, yükleme dosyasını

imzalamak için kullanılan sertifikanın süresi dolduktan sonra artık AIR uygulaması yüklenemez.

5 Bilinmeyen nedenlerden kaynaklanan bir hata oluştu.

6 Uygulama tanımlayıcı dosyası bulunamadı.

7 Uygulama tanımlayıcısının içeriği geçersiz. Bu hata genellikle XML'in doğru biçimlendirilmediğini belirtir.

8 Ana uygulama içerik dosyası (uygulama tanımlayıcı dosyasının <content> öğesinde belirtilen)

bulunamadı.

9 Ana uygulama içerik dosyası geçerli bir SWF veya HTML dosyası değil.

Çıkış kodu Açıklama

Page 314: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

307ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Varolan bir AIR uygulamasını güncellemek için bir paket oluşturuyorsanız, paket, orijinal uygulamayla aynı sertifika

veya aynı kimliğe sahip bir sertifika kullanılarak imzalanmalıdır. Aynı kimliğe sahip olmak için, iki sertifika aynı

belirgin ada (tüm bilgilendirici alanlar eşleşir) ve kök sertifikaya giden aynı sertifika zincirine sahip olmalıdır. Bu

nedenle, tanımlayıcı bilgilerin hiçbirini değiştirmediğiniz sürece, bir sertifika yetkilisinden alınan yenilenmiş

sertifikayı kullanabilirsiniz.

AIR 1.1 sürümünden itibaren, -migrate komutunu kullanarak bir uygulamayı yeni sertifika kullanmasını

sağlayabilirsiniz. Sertifikaya geçiş yapmak AIR dosyasının hem yeni hem de eski sertifikalarla imzalanmasını

gerektirir. Sertifika geçişi sayesinde kendinden imzalı bir sertifikadan ticari kod imzalayıcı sertifikasına veya

kendinden imzalı ya da ticari bir sertifikadan başka bir sertifikaya geçebilirsiniz. Bir sertifikaya geçiş yaptığınızda, var

olan kullanıcılarınızın, sizin yeni sürümünüzü yüklemeden önce var olan uygulamalarını kaldırmaları gerekmez.

Geçiş imzaları varsayılan olarak zaman damgalıdır.

Not: Uygulama tanımlayıcı dosyasındaki ayarlar, AIR uygulamasının kimliğini ve varsayılan yükleme yolunu belirler.

Bkz. “Uygulama tanımlayıcı dosyasının yapısı” sayfa 41.

AIR dosyasını tek adımda paketleme ve imzalama

❖ Aşağıdaki sözdizimiyle -package komutunu kullanın (tek bir komut satırında):

adt -package SIGNING_OPTIONSair_fileapp_xml [file_or_dir | -C dirfile_or_dir | -e file dir ...] ...

SIGNING_OPTIONS İmzalama seçenekleri, AIR dosyasını imzalamak için kullanılan özel anahtarı ve sertifikayı

içeren anahtar deposunu tanımlar. Bir AIR uygulamasını ADT tarafından oluşturulan kendinden imzalı bir

sertifikayla imzalamak için kullanabileceğiniz seçenekler şunlardır:

-storetype pkcs12 -keystore certificate.p12

Bu örnekte certificate.p12, anahtar deposu dosyasının adıdır. (Komut satırında verilmediği için ADT sizden şifreyi

ister.) İmzalama seçenekleri “ADT komut satırı imzalama seçenekleri” sayfa 310 tamamen açıklanmaktadır.

air_file Oluşturulan AIR dosyasının adı.

app_xml Uygulama tanımlayıcı dosyasının yolu. Yol, geçerli dizine göre veya mutlak yol olarak belirtilebilir.

(Uygulama tanımlayıcı dosyası, AIR dosyasında “application.xml” olarak yeniden adlandırılır.)

file_or_dir AIR dosyasında paketlenecek dosyalar ve dizinler. İstenilen sayıda dosya ve dizin boşluklarla ayrılarak

belirtilebilir. Bir dizini listelerseniz, gizli dosyalar haricinde bu dizinin içinde bulunan tüm dosyalar ve alt dizinler

pakete eklenir. (Buna ek olarak, uygulama tanımlayıcı dosyası doğrudan veya joker karakter ya da dizin genişletme

yoluyla belirtilmişse, yoksayılır ve pakete ikinci defa eklenmez.) Belirtilen dosyalar ve dizinler geçerli dizinde veya

geçerli dizinin alt dizinlerinden birinde olmalıdır. Geçerli dizini değiştirmek için -C seçeneğini kullanın.

Page 315: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

308ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Önemli: Joker karakterler C seçeneğinin ardından file_or_dir argümanlarında kullanılamaz. (Komut kabukları

joker karakterleri, argümanları ADT'ye iletmeden önce genişletir, bu da ADT'nin dosyaları yanlış konumda

aramasına neden olur.) Ancak yine de geçerli dizinin yerine geçmesi için nokta karakterini, ".", kullanabilirsiniz.

Örneğin, "-C assets ." alt dizinler de dahil olmak üzere varlıklar dizinindeki her şeyi uygulama paketinin kök

düzeyine kopyalar.

-C dir Uygulama paketine eklenen sonraki dosyaları ve dizinleri işlemeden önce, çalışma dizinini dir değeri olarak

değiştirir. Dosyalar veya dizinler uygulama paketinin köküne eklenir. Dosya sistemindeki birden çok noktadan

dosyaları dahil etmek için –C seçeneği istenilen sayıda kullanılabilir. dir için göreceli bir yol belirtilmişse, yol her

zaman orijinal çalışma dizininden çözümlenir.

ADT paketteki dosyaları ve dizinleri işledikçe, geçerli dizin ve hedef dosyalar arasındaki göreceli yollar saklanır.

Paket yüklendiğinde, bu yollar uygulama dizini yapısına genişletilir. Bu nedenle, -C release/bin

lib/feature.swf dosyasını belirtmek, release/bin/lib/feature.swf dosyasını kök uygulama klasörünün

lib alt dizinine yerleştirir.

-e file dir Belirtilen dosyayı belirtilen paket dizinine yerleştirir.

Not: Uygulama tanımlayıcı dosyasının <content> öğesi, ana uygulama dosyasının uygulama paketi dizin

ağacındaki son konumunu belirtmelidir.

ADT Örnekleri

Geçerli dizindeki belirli uygulama dosyalarını paketleyin:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf components.swc

Geçerli çalışma dizinindeki tüm dosyaları ve alt dizinleri paketleyin:

adt –package -storetype pkcs12 -keystore ../cert.p12 myApp.air myApp.xml .

Not: Anahtar deposu dosyası, uygulamanızı imzalamak için kullanılan özel anahtarı içerir. İmzalayıcı sertifikasını

hiçbir zaman AIR paketine dahil etmeyin. ADT komutunda joker karakterler kullanırsanız, anahtar deposu dosyasını

farklı bir konuma yerleştirin, böylece pakete dahil olmaz. Bu örnekte anahtar deposu dosyası cert.p12, üst dizinde

bulunur.

Yalnızca ana dosyaları ve bir görüntüler alt dizinini paketleyin.

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf images

application.xml dosyasını ve bir çalışma dizininde (release/bin) bulunan ana SWF dosyasını paketleyin:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp.xml –C release/bin myApp.swf

Derleme dosya sisteminizdeki birden fazla yerden alınan varlıkları paketleyin. Bu örnekte uygulama varlıkları

paketlemeden önce aşağıdaki klasörlerde konumlandırılmıştır:

Page 316: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

309ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

/devRoot /myApp /release /bin myApp.xml myApp.swf /artwork /myApp /images image-1.png ... image-n.png /libraries /release /libs lib-1.swf ... lib-n.swf AIRAliases.js

Aşağıdaki ADT komutunu /devRoot/myApp dizininden çalıştırma:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp.xml –C release/bin myApp.swf –C ../artwork/myApp images –C ../libraries/release libs

Şu paket yapısıyla sonuçlanır:

/myAppRoot /META-INF /AIR application.xml hash myApp.swf mimetype /images image-1.png ... image-n.png /libs lib-1.swf ... lib-n.swf AIRAliases.js

ADT'yi bir Java programı olarak çalıştırın (sınıf yolunu ayarlamadan):

java –jar {AIRSDK}/lib/ADT.jar –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf

ADT'yi bir Java programı olarak çalıştırın (Java sınıf yolu ADT.jar paketini içerecek şekilde ayarlanmış olarak):

java com.adobe.air.ADT –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf

Page 317: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

310ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

ADT komut satırı imzalama seçenekleri

ADT, AIR uygulamalarını imzalamak için özel anahtarlara ve sertifikalara erişmek amacıyla Java Cryptography

Architecture (JCA) kullanır. İmzalama seçenekleri anahtar deposunu ve bu anahtar deposu içindeki özel anahtarı ve

sertifikayı tanımlar.

Anahtar deposu hem özel anahtarı hem de ilişkilendirilmiş sertifika zincirini içermelidir. Sertifika zinciri uygulamanın

yayıncı kimliğini belirlemek için kullanılır. İmzalayıcı sertifikası bilgisayarda güvenilen bir sertifikaya eklenirse,

sertifikanın ortak adı AIR yükleme iletişim kutusunda yayıncı adı olarak görüntülenir.

ADT sertifikanın x509v3 standardına uymasını (RFC3280) ve kod imzalama için uygun değerlere sahip Genişletilmiş

Anahtar Kullanımı uzantısını içermesini gerektirir. Sertifikadaki kısıtlamalar korunur ve AIR uygulamalarını

imzalamaya yönelik bazı sertifikaların kullanımını engelleyebilir.

Not: ADT, uygun olduğunda, sertifika geri alma listelerini denetlemek ve zaman damgalarını almak üzere Internet

kaynaklarına bağlanmak için Java çalışma zamanı ortamı proxy ayarlarını kullanır. ADT kullanırken Internet

kaynaklarına bağlanma konusunda bir sorunla karşılaşırsanız ve ağınız belirli proxy ayarları isterse, JRE proxy

ayarlarını yapılandırmanız gerekebilir.

AIR imzalama seçeneklerini belirtme

❖ -package ve -prepare komutları için ADT imzalama seçeneklerini belirtmek üzere aşağıdaki sözdizimini

kullanın:

[-alias aliasName] [-storetype type] [-keystore path] [-storepass password1] [-keypass password2] [-providerName className] [-tsa url]

-alias aliasName —Anahtar deposundaki anahtarın başka adı. Anahtar deposu yalnızca tek bir sertifika içerdiğinde

başka ad belirtmek gerekmez. Başka ad belirtilmemişse, ADT, anahtar deposundaki ilk anahtarı kullanır.

Tüm anahtar deposu yönetim uygulamaları, başka bir adın sertifikalara atanmasına izin vermez. Örneğin Windows

sistemi anahtar deposunu kullanırken, sertifikanın ayırt edilen adını başka ad olarak kullanın. Kullanılabilir

sertifikaları listelemek için Java Keytool yardımcı programını kullanabilirsiniz, böylece başka adı belirleyebilirsiniz.

Örneğin şu komutu çalıştırmak:

keytool -list -storetype Windows-MY

sertifika için aşağıdakine benzer bir çıktı oluşturur:

CN=TestingCert,OU=QE,O=Adobe,C=US, PrivateKeyEntry, Certificate fingerprint (MD5): 73:D5:21:E9:8A:28:0A:AB:FD:1D:11:EA:BB:A7:55:88

ADT komut satırında bu sertifikaya başvurmak için, başka adı şu şekilde ayarlayın:

CN=TestingCert,OU=QE,O=Adobe,C=US

Mac OS X'te Keychain'deki bir sertifikanın başka adı, Keychain Access uygulamasında görüntülenen addır.

-storetype type —Anahtar deposu uygulaması tarafından belirlenen anahtar deposu türü. Java'nın çoğu

yüklemesinde bulunan varsayılan anahtar deposu uygulaması JKS ve PKCS12 türlerini destekler. Java 5.0, PKCS11

türü için donanım belirteçlerindeki anahtar depolarına erişim konusunda ve Keychain türü için de Mac OS X

anahtarlığa erişim konusunda destek içerir. Java 6.0, MSCAPI türü için destek içerir (Windows'ta). Diğer JCA

sağlayıcıları yüklenmişse ve yapılandırılmışsa, ek anahtar deposu türleri kullanılabilirdir. Anahtar deposu türü

belirtilmemişse, varsayılan JCA sağlayıcısı için varsayılan tür kullanılır.

Page 318: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

311ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

-keystore path —Dosya tabanlı saklama türleri için anahtar deposu dosyasının yolu.

-storepass password1 —Anahtar deposuna erişmek için gereken şifre. Belirtilmemişse, ADT şifreyi ister.

-keypass password2 —AIR uygulamasını imzalamada kullanılan özel anahtara erişim için gereken şifre.

Belirtilmemişse, ADT şifreyi ister.

-providerName className —Belirtilen anahtar deposu türü için JCA sağlayıcısı. Belirtilmemişse, ADT, bu

anahtar deposu türü için varsayılan sağlayıcıyı kullanır.

-tsa url —Dijital imzaya zaman damgası uygulamak için RFC3161-uyumlu zaman damgası sunucusun URL'sini

belirtir. URL belirtilmemişse, Geotrust tarafından sağlanan varsayılan bir zaman damgası sunucusu kullanılır. Bir

AIR uygulamasının imzası zaman damgalı olduğunda, imzalayıcı sertifikasının süresi dolduktan sonra da

uygulama yüklenebilir, bunun nedeni zaman damgasının, sertifikanın imzalama sırasında geçerli olduğunu

doğrulamasıdır.

ADT, zaman damgası sunucusuna bağlanamazsa, imzalama iptal edilir ve hiç paket üretilmez. Zaman damgalamayı

devre dışı bırakmak için -tsa none öğesini belirtin. Ancak, zaman damgası olmadan paketlenmiş bir AIR

uygulaması, imzalayıcı sertifikasının süresi dolduktan sonra artık yüklenebilir olmaz.

Not: İmzalama seçenekleri, Java Keytool yardımcı programının eşdeğer seçenekleri gibidir. Keytool yardımcı

programını, Windows'ta anahtar depolarını incelemek ve yönetmek için kullanabilirsiniz. Apple® güvenlik yardımcı

programı da Mac OS X'te bu amaçla kullanılabilir.

İmzalama seçeneği örnekleri

.p12 dosyasıyla imzalama:

-storetype pkcs12 -keystore cert.p12

Varsayılan Java anahtar deposuyla imzalama:

-alias AIRcert -storetype jks

Belirli bir Java anahtar deposuyla imzalama:

-alias AIRcert -storetype jks -keystore certStore.keystore

Mac OS X anahtarlık ile imzalama:

-alias AIRcert -storetype KeychainStore -providerName Apple

Windows sistemi anahtar deposuyla imzalama:

-alias cn=AIRCert -storeype Windows-MY

Saklama türü Anahtar deposu formatı Minimum Java

sürümü

JKS Java anahtar deposu

dosyası (.keystore)

1.2

PKCS12 PKCS12 dosyası (.p12 veya

.pfx)

1.4

PKCS11 Donanım belirteci 1.5

KeychainStore Mac OS X Keychain 1.5

Windows-MY

veya Windows-

ROOT

MSCAPI 1.6

Page 319: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

312ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Donanım belirteciyle imzalama (Java'yı belirteç kullanmak üzere yapılandırma konusundaki talimatlar ve doğru

providerName değeri için belirteç üreticisinin talimatlarına başvurun):

-alias AIRCert -storetype pkcs11 -providerName tokenProviderName

Zaman damgası gömmeden imzalama:

-storetype pkcs12 -keystore cert.p12 -tsa none

ADT ile imzalanmamış bir AIR ara dosyası oluşturma

İmzalanmamış AIR ara dosyası oluşturmak için -prepare komutunu kullanın. Geçerli bir AIR yükleme dosyası

üretmek için, AIR ara dosyası ADT -sign komutuyla imzalanmalıdır.

-prepare komutu, -package komutuyla aynı bayrakları ve parametreleri alır (imzalama seçenekleri dışında). Aradaki

tek fark çıktı dosyasının imzalanmamasıdır. Ara dosya, dosya adı uzantısıyla oluşturulur: airi.

AIR ara dosyasını imzalamak için, ADT -sign komutunu kullanın. (Bkz. AIR ara dosyasını ADT ile imzalama.)

ADT örneği

adt –prepare unsignedMyApp.airi myApp.xml myApp.swf components.swc

AIR ara dosyasını ADT ile imzalama

AIR ara dosyasını ADT ile imzalamak için, -sign komutunu kullanın. sign komutu yalnızca AIR ara dosyalarıyla

çalışır (airi uzantısı). AIR dosyası ikinci kez imzalanamaz.

AIR ara dosyası oluşturmak için, adt -prepare komutunu kullanın. (Bkz. “ADT ile imzalanmamış bir AIR ara dosyası

oluşturma” sayfa 312.)

AIRI dosyasını imzalama

❖ ADT -sign komutunu aşağıdaki sözdizimiyle kullanın:

adt -sign SIGNING_OPTIONSairi_fileair_file

SIGNING_OPTIONS İmzalama seçenekleri, AIR dosyasının imzalanacağı özel anahtarı ve sertifikayı tanımlar. Bu

seçenekler “ADT komut satırı imzalama seçenekleri” sayfa 310 açıklanmaktadır.

airi_file İmzalanacak olan imzalanmamış AIR ara dosyasının yolu.

air_file Oluşturulacak AIR dosyasının adı.

ADT Örneği

adt –sign -storetype pkcs12 -keystore cert.p12 unsignedMyApp.airi myApp.air

Daha fazla bilgi için, bkz. “AIR dosyasını dijital olarak imzalama” sayfa 284.

Uygulama sertifikasını değiştirmek için AIR dosyasını imzalama

Var olan bir AIR uygulamasını yeni bir imzalayıcı sertifikası kullanmak üzere güncellemek için, ADT -migrate

komutunu kullanın.

Page 320: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

313ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Sertifika geçişi aşağıdaki durumlarda yararlı olabilir:

• Kendinden imzalı bir sertifikadan bir sertifika yetkilisi tarafından yayımlanan bir sertifikaya yükseltme yapılırken

• Süresi dolmak üzere olan kendinden imzalı sertifika, yeni bir kendinden imzalı sertifikayla değiştirilirken

• Bir ticari sertifika diğeriyle değiştirilirken, örneğin şirketinizin kimliği değiştiğinde

Geçiş imzasını uygulamak için orijinal sertifika hala geçerli olmalıdır. Sertifikanın süresi dolduktan sonra, geçiş imzası

uygulanamaz. Uygulamanızın kullanıcılarının güncellenen sürümü yükleyebilmeleri için, var olan sürümü

kaldırmaları gerekecektir. Geçiş imzasının varsayılan olarak zaman damgalı olduğunu unutmayın, böylelikle bir geçiş

imzasıyla imzalanan AIR güncellemeleri, sertifikanın süresi dolduktan sonra da geçerli olur.

Not: Ticari olarak yayımlanmış bir sertifikayı yenilediğinizde, genellikle sertifikaya geçiş yapmanız gerekmez. Yenilenen

sertifika, ayırt edilen ad değiştirilene kadar orijinaliyle aynı yayıncı kimliğini korur. Ayırt edilen adın belirlenmesine

yönelik kullanılan sertifika niteliklerinin tam listesi için, bkz. “AIR yayıncı kimlikleri hakkında” sayfa 285.

Uygulamayı yeni bir sertifika kullanmaya geçirmek için:

1 Uygulamanız için bir güncelleme oluşturun

2 Güncelleme AIR dosyasını yeni sertifikayla paketleyin ve imzalayın

3 AIR dosyasını -migrate komutunu kullanarak orijinal sertifikayla yeniden imzalayın

-migrate komutuyla imzalanmış bir AIR dosyası hem uygulamanın yeni bir sürümünü yüklemek hem de eski

sertifikayla imzalananlar da dahil olmak üzere önceki sürümlerini güncellemek için kullanılabilir.

Bir AIR uygulamasını yeni bir sertifika kullanmaya geçirme

❖ ADT -migrate komutunu aşağıdaki sözdizimiyle kullanın:

adt -migrate SIGNING_OPTIONSair_file_inair_file_out

SIGNING_OPTIONS İmzalama seçenekleri, AIR dosyasının imzalanacağı özel anahtarı ve sertifikayı tanımlar. Bu

seçenekler orijinal imzalayıcı sertifikayı tanımlamalıdır ve “ADT komut satırı imzalama seçenekleri” sayfa 310

açıklanmaktadır.

air_file_in Yeni sertifikayla imzalanan, güncelleme için AIR dosyası.

air_file_out Oluşturulacak AIR dosyası.

ADT Örneği

adt –migrate -storetype pkcs12 -keystore cert.p12 myApp.air myApp.air

Daha fazla bilgi için, bkz. “AIR dosyasını dijital olarak imzalama” sayfa 284.

Not: -migrate komutu ADT'ye AIR 1.1 sürümünde eklendi.

ADT ile kendinden imzalı bir sertifika oluşturma

Kendinden imzalı sertifikalar sayesinde geçerli bir AIR yükleme dosyası üretebilirsiniz, ancak kendinden imzalı

sertifikaların gerçekliği doğrulanamadığı için, bu sertifikalar kullanıcılarınıza yalnızca sınırlı güvenlik teminatları

sağlar. Kendinden imzalı bir AIR dosyası yüklendiğinde, yayıncı bilgileri kullanıcıya Bilinmeyen olarak görüntülenir.

ADT tarafından oluşturulan sertifika beş yıl boyunca geçerlidir.

Page 321: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

314ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Kendinden oluşturulan bir sertifikayla imzalanan AIR uygulaması için bir güncelleme oluşturursanız, hem orijinal

hem de güncelleme AIR dosyalarını imzalamak için aynı sertifikayı kullanmanız gerekir. ADT'nin ürettiği sertifikalar,

aynı parametreler kullanılsa bile her zaman benzersizdir. Bu nedenle, güncellemelerin ADT tarafından oluşturulan bir

sertifikayla kendinden imzalanmasını istiyorsanız, orijinal sertifikayı güvenli bir konumda saklayın. Buna ek olarak,

ADT tarafından oluşturulan orijinal sertifikanın süresi dolduktan sonra, güncellenmiş bir AIR dosyası üretemezsiniz.

(Yeni uygulamaları farklı bir sertifikayla yayınlayabilirsiniz, ancak aynı uygulamanın yeni sürümlerini

yayınlayamazsınız.)

Önemli: Adobe, kendinden imzalı sertifikaların sınırlamaları nedeniyle, genel olarak piyasaya sürülmüş AIR

uygulamalarını imzalamak için VeriSign veya Thawte gibi itibarlı bir sertifika yetkilisinden alınan ticari bir sertifikaya

sahip olmanızı özellikle önerir.

ADT tarafından oluşturulan sertifika ve ilişkilendirilmiş özel anahtar, PKCS12 türü bir anahtar deposu dosyasında

saklanır. Belirtilen şifre anahtar deposunda değil, anahtarın kendisinde ayarlanır.

AIR dosyalarının kendiliğinden imzalanması için bir dijital kimlik sertifikası oluşturma

❖ ADT -certificate komutunu kullanın (tek bir komut satırında):

adt -certificate -cn name [-ou org_unit][-o org_name][-c country] key_typepfx_filepassword

-cn name Yeni sertifikanın ortak adı olarak atanan dize.

-ou org_unit Sertifikayı yayımlayan birim olarak atanan dize. (İsteğe bağlı.)

-o org_nameSertifikayı yayımlayan kurum olarak atanan dize. (İsteğe bağlı.)

-c countryİki harfli ISO-3166 ülke kodu. Geçersiz bir kod verilirse, sertifika oluşturulmaz. (İsteğe bağlı.)

key_typeSertifika için kullanılacak anahtar türü, “1024-RSA” veya “2048-RSA”.

pfx_file Oluşturulacak sertifika dosyasının yolu.

password Yeni sertifika için şifre. AIR dosyaları bu sertifikayla imzalanırken şifre gereklidir.

Sertifika oluşturma örnekleri

adt -certificate -cn SelfSign -ou QE -o "Example, Co" -c US 2048-RSA newcert.p12 39#wnetx3tl adt -certificate -cn ADigitalID 1024-RSA SigningCert.p12 39#wnetx3tl

AIR dosyalarını imzalarken bu sertifikaları kullanmak için, aşağıdaki imzalama seçeneklerini ADT -package veya -

prepare komutlarıyla kullanırsınız:

-storetype pkcs12 -keystore newcert.p12 -keypass 39#wnetx3tl -storetype pkcs12 -keystore SigningCert.p12 -keypass 39#wnetx3tl

Apache Ant aracını SDK araçlarıyla kullanma

Bu konu, Apache Ant oluşturma aracının AIR uygulamalarını test etmede ve paketlemede kullanılmasına ilişkin

örnekler sunar.

Not: Bu açıklamalar Apache Ant aracını kapsamlı bir şekilde anlatma amacı taşımaz. Ant belgeleri için, bkz.

http://Ant.Apache.org.

Page 322: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

315ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Ant aracını basit projeler için kullanma

Bu örnek, Ant ve AIR komut satırı araçları kullanılarak bir AIR uygulaması oluşturmayı gösterir. Basit bir proje yapısı,

tüm dosyalar tek bir dizinde saklı olarak kullanılır.

Bu özellikler, oluşturma komut dosyasının yeniden kullanılmasını kolaylaştırmak için birçok tanımlı özellik kullanır.

Bir özellik kümesi, komut satırı araçlarının yüklenen konumlarını tanımlar:

<property name="SDK_HOME" value="C:/Flex3SDK"/> <property name="ADL" value="${SDK_HOME}/bin/adl.exe"/> <property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>

İkinci özellik kümesi projeye özgüdür. Bu özellikler, uygulama tanımlayıcı ve AIR dosyalarının kök kaynak dosyasına

dayalı olarak adlandırıldığı bir adlandırma kuralını kabul eder. Diğer kurallar kolaylıkla desteklenir.

<property name="APP_NAME" value="ExampleApplication"/> <property name="APP_ROOT" value="."/> <property name="APP_DESCRIPTOR" value="${APP_ROOT}/${APP_NAME}-app.xml"/>

<property name="AIR_NAME" value="${APP_NAME}.air"/> <property name="STORETYPE" value="pkcs12"/> <property name="KEYSTORE" value="ExampleCert.p12"/>

ADL'yi bir uygulamayı test etmesi için çağırma

Uygulamayı ADL ile çalıştırmak için, bir exec görevi kullanın:

<target name="test" depends="compile"> <target name="test"> <exec executable="${ADL}"> <arg value="${APP_DESCRIPTOR}"/> </exec> </target>

ADT'yi bir uygulamayı paketlemesi için çağırma

Uygulamayı paketlemek için adt.jar aracını çalıştırmak üzere bir Java görevi kullanın:

<target name="package"> <java jar="${ADT.JAR}" fork="true" failonerror="true"> <arg value="-package"/> <arg value="-storetype"/> <arg value="${STORETYPE}"/> <arg value="-keystore"/> <arg value="${KEYSTORE}"/> <arg value="${AIR_NAME}"/> <arg value="${APP_DESCRIPTOR}"/> <arg value="${APP_NAME}.swf"/> <arg value="*.png"/> </java> </target>

Uygulamanızın paketlenecek başka dosyaları da varsa, ek <arg> öğeleri ekleyebilirsiniz.

Ant'ı daha karmaşık projeler için kullanma

Genel bir uygulamanın dizin yapısı tek bir dizinden daha karmaşıktır. Aşağıdaki örnek, daha pratik bir proje dizin

yapısına sahip olan bir AIR uygulamasını derlemek, test etmek ve paketlemek için kullanılan bir oluşturma dosyasını

gösterir.

Page 323: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

316ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

Bu örnek proje, uygulama kaynak dosyalarını ve simge dosyaları gibi başka varlıkları src dizininde saklar. Oluşturma

komut dosyası, aşağıdaki çalışma dizinlerini oluşturur:

build Derlenen SWF dosyalarının sürümlerini (hata ayıklama özelliğine sahip olmayan) saklar.

debug Uygulamanın, derlenen tüm SWF'ler ve varlık dosyaları da dahil olmak üzere paketlenmemiş bir hata ayıklama

sürümünü saklar. ADL yardımcı programı, uygulamayı bu dizinden çalıştırır.

release Son AIR paketini saklar

AIR araçları, geçerli çalışma dizininin dışındaki dosyalarda çalışırken bazı ek seçeneklerin kullanılmasını gerektirir.

Testing ADL'ye iletilen ikinci argüman AIR uygulamasının kök dizinini belirtir. Uygulama kök dizinini belirtmek için

aşağıdaki satır, test görevine eklenir:

<arg value="${debug}"/>

Packaging Son paket yapısının bir parçası olmaması gereken alt dizinlerden dosya paketlemek, ADT çalışma dizininin

değiştirilmesi için -C direktifinin kullanılmasını gerektirir. -C direktifini kullandığınızda, yeni çalışma dizinindeki

dosyalar ve dizinler AIR paket dosyasının kök düzeyine kopyalanır. Bu nedenle, -C build file.png, file.png

dosyasını uygulama dizininin köküne kopyalar. Benzer şekilde -C assets icons, simge klasörünü kök düzeyine

kopyalar, simgeler klasörünün içindeki tüm dosyaları ve dizinleri de kopyalar. Örneğin, aşağıda bulunan paket

görevindeki satır dizisi, simgeler dizinini doğrudan uygulama paket dosyasının kök düzeyine ekler:

<arg value="-C"/> <arg value="${assets}"/> <arg value="icons"/>

Not: Birçok kaynağı ve varlığı farklı göreceli konumlara taşımanız gerekiyorsa, ADT için karmaşık bir argüman listesi

oluşturmak yerine, onları Ant görevleri kullanarak geçici bir dizine ayırmak genellikle daha kolaydır. Kaynaklarınız

organize edildikten sonra, onları paketlemek için basit bir ADT argüman listesi kullanılabilir.

<project> <!-- SDK properties --> <property name="SDK_HOME" value="C:/Flex3SDK"/> <property name="ADL" value="${SDK_HOME}/bin/adl.exe"/> <property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/> <!-- Project properties --> <property name="PROJ_ROOT_DIR" value="."/> <property name="APP_NAME" value="ExampleApplication"/> <property name="APP_ROOT_DIR" value="."/> <property name="APP_ROOT_FILE" value="${APP_NAME}.swf"/> <property name="APP_DESCRIPTOR" value="${PROJ_ROOT_DIR}/${APP_NAME}-app.xml"/> <property name="AIR_NAME" value="${APP_NAME}.air"/> <property name="release" location="${PROJ_ROOT_DIR}/release"/> <property name="assets" location="${PROJ_ROOT_DIR}/src/assets"/> <property name="STORETYPE" value="pkcs12"/> <property name="KEYSTORE" value="ExampleCert.p12"/> <target name="init" depends="clean"> <mkdir dir="${release}"/> </target> <target name="test"> <exec executable="${ADL}"> <arg value="${APP_DESCRIPTOR}"/> <arg value="${APP_ROOT_DIR}"/> </exec>

Page 324: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

317ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Komut satırı araçlarını kullanarak AIR uygulaması oluşturma

</target> <target name="package" depends="init"> <java jar="${ADT.JAR}" fork="true" failonerror="true"> <arg value="-package"/> <arg value="-storetype"/> <arg value="${STORETYPE}"/> <arg value="-keystore"/> <arg value="${KEYSTORE}"/> <arg value="${release}/${AIR_NAME}"/> <arg value="${APP_DESCRIPTOR}"/> <arg value="-C"/> <arg value="${APP_ROOT_DIR}"/> <arg value="${APP_ROOT_FILE}"/> <arg value="-C"/> <arg value="${assets}"/> <arg value="icons"/> </java> </target> <target name="clean" description="clean up"> <delete dir="${release}"/> </target> </project>

Page 325: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

318

Dizin

Semboller

? (soru işareti) karakter, adlandırılmamış SQL parametrelerinde 168

@ (at) karakteri, SQL ifadesi parametre adlarında 167

\

(iki nokta) karakteri, SQL ifadesi parametre adlarında 167

Numaralar

1024-RSA 314

2048-RSA 314

Á

AC_FL_RunContent() işlevi (default_badge.html'de) 277

AC_RuntimeActiveContent.js 277

acceptDragDrop() yöntemi (NativeDragManager sınıfı) 123, 127

açılır menüler 77, 87

oluşturma 81

acompc derleyicisi 217

Acrobat 193, 244

Action Message Format (AMF) 124, 148, 151

ActionScript

görüntü nesneleri 64

JavaScript çapraz komut dosyası 213

ActionScript belgeleri 9

ActionScript ve JavaScript arasında dönüşen Date nesneleri 218

ActionScript ve JavaScript arasında dönüşen RegExp nesneleri 218

activate() yöntemi (NativeWindow sınıfı) 60, 65, 66

active olayı 71

activeWindow özelliği (NativeApplication sınıfı) 65

addChild() yöntemi (Stage sınıfı) 63

addChildAt() yöntemi (Stage sınıfı) 63

adlandırılmamış parametreler (SQL ifadelerinde) 168

adlandırılmış parametreler (SQL ifadelerinde) 167

Adobe Acrobat Geliştirici Merkezi 245

Adobe AIR

giriş 7

güncelleme 23

kaldırma 2

yeni işlevler 49

yükleme 1, 23

Adobe belgeleri 9

Adobe destek web sitesi 9

Adobe Media Player 248

Adobe Press kitapları 9

Adobe Reader 193, 244

AES-CBC 128-bit şifreleme 189

ağ iletişimiyle yerel sanal alan 26

AIR çalışma zamanı

güncelleme 23

kaldırma 2

saptama 266, 280

yama düzeyleri 42, 266

yeni işlevler 49

yükleme 1

AIR çalışma zamanını veya AIR uygulamasını güncellemek için gerekli ayrıcalıklar 23

AIR çalışma zamanını veya bir AIR uygulamasını güncellemek için gerekli ayrıcalıklar 275, 282

AIR dosyaları

imzalama 284

paketleme 306

AIR dosyalarını imzalama 306

AIR dosyalarını paketleme

AIR Geliştirici Aracı (ADT) 306

AIR Geliştirici Aracı (ADT)

AIRI dosyaları 312

bir AIR dosyasını paketleme 306

imzalama seçenekleri 310

kendinden imzalı sertifikalar oluşturma 313

AIR geliştirici sertifikaları 285

AIR Hata Ayıklama Başlatıcısı (ADL)

çıkış ve hata kodları 305

air özelliği (AIRAliases.js dosyası) 192, 211

AIR uygulamaları

ayarlar 41, 42

başlatma 257

çalıştırma 275, 282

çıkma 257

dağıtma 275

dosya türü ilişkilendirmeleri 48, 258, 265

güncelleme 23, 47, 290

kaldırma 26

kurulumu saptama 281

simgeler 47

sürümler 43, 266, 290

tarayıcı başlatma 47

telif hakkı bilgileri 45

yükleme 23, 275

yükleme yolu 43

AIR uygulamaları için telif hakkı bilgileri 45

AIR uygulamalarından çıkma 257

AIR uygulamalarını başlatma 257

AIR uygulamalarını çalıştırma 275, 282

AIR uygulamalarını dağıtma 275

AIR uygulamalarını güncelleme 47, 290

AIR uygulamalarını yükleme 275

AIR uygulaması

ayarlar 264

AIRAliases.js dosyası 192, 211, 212

AIRI dosyaları

AIR Geliştirici Aracı (ADT) ile oluşturma 312

AIRLocalizer.js dosyası 295

Ajax

güvenlik 32

uygulama sanal alanında destek 32

alanlar (veritabanı) 158

allowBrowserInvocation öğesi (uygulama tanımlayıcı dosyası) 47, 257, 260

allowCrossDomainXHR niteliği (kare ve iframe öğeleri) 195, 201

allowLoadBytesCodeExecution özelliği (LoaderContext sınıfı) 39

alt menü özelliği

NativeMenuItem sınıfı 79

alt menüler 79, 82

alwaysInFront özelliği (NativeWindow sınıfı) 66

ana anahtarlar

menü öğeleri 80

veritabanları 176

ana dizin 99

ana ekran 74

anahtar depoları 310, 314

anımsatıcı karakterler

menü öğeleri 80

app desteği URL şeması 220

app URL şeması 37, 39, 61, 212, 220, 245

Page 326: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

319ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

app-depolama URL şeması 37

AppInstallDisabled (Windows kayıt defteri ayarları) 26

Apple geliştirici sertifikaları 285

applicationDescriptor özelliği (NativeApplication sınıfı) 264

ApplicationDomain sınıfı 214

applicationStorageDirectory özelliği (File sınıfı) 99

app-storage URL şeması 39, 245

araç çubuğu (Mac OS) 58

arguments özelliği

BrowserInvokeEvent sınıfı 261

InvokeEvent sınıfı 258

Asfunction protokolü 28

at (@) karakteri, SQL ifadesi parametre adlarında 167

attach() yöntemi (SQLConnection sınıfı) 178

autoExit özelliği

NativeApplication sınıfı 262

AUTOINCREMENT sütunları (SQL) 177

ayırıcı satırlar, menü 83

B

bağlam menüleri 77, 83

HTML 84

başlangıç (sistem), bir AIR uygulamasını başlatma 260

Başlat menüsü (Windows) 45

başlık çubuğu simgeleri (Windows) 58

bayt dizileri

bayt sırası 150

boyutu 149

konum 149

bayt sırası 150

belgeler, ilgili 9

Belgelerim dizini (Windows) 99

bellek içi veritabanları 161

big-endian bayt sırası 150

bilinmeyen yayıncı adı (AIR uygulama yükleyicisinde) 284

bir AIR uygulamasıyla ilişkilendirilen uzantılar (dosya) 48, 258

bir imzayı geçirme 287, 312

bitmap görüntüleri, simgeler için ayar 92

bitmapler

kopyala ve yapıştır desteği 137

sürükle ve bırak desteği 122, 130

bitmaps özelliği (Icon sınıf) 92

boşta kalma süresi (kullanıcı) 266

bounce yöntemi() (Icon sınıfı) 93

boyut, pencereler 60

boyutlar, pencereler 46

browseForDirectory() yöntemi (File sınıfı) 101

browseForOpen() yöntemi (File sınıfı) 102

browseForSave() yöntemi (File sınıfı) 102

browserInvoke olayı 261, 283

BrowserInvokeEvent sınıfı 260

ByteArray sınıfı

bytesAvailable özelliği 149

compress() yöntemi 151

length özelliği 149

position özelliği 149

readBytes() yöntemi 148

readFloat() yöntemi 148

readInt() yöntemi 148

readObject() yöntemi 148

readUTFBytes() yöntemi 148

uncompress() yöntemi 151

writeBytes() yöntemi 148

writeFloat() yöntemi 148

writeInt() yöntemi 148

writeObject() yöntemi 148

writeUTFBytes() yöntemi 148

yapıcı 148

bytesAvailable özelliği (ByteArray sınıfı) 149

Č

Canvas nesnesi 196, 203

Capabilities sınıfı

playerType özelliği 266

çapraz komut dosyası 34, 213, 220

Ch

childSandboxBridge özelliği

LoaderInfo sınıfı 34

Window nesnesi 30

çıkış kodları (ADL) 305

clearData() yöntemi

ClipboardData nesnesi 197

DataTransfer nesnesi 130, 198

clientX özelliği (HTML drag olayları) 130

clientY özelliği (HTML drag olayları) 130

Clipboard 197

clipboard olayı 198

clipboard özelliği (NativeDragEvent sınıfı) 127

Clipboard sınıfı

generalClipboard özelliği 137

getData() yöntemi 123, 127

setData() yöntemi 145

setDataHandler() yöntemi 145

clipboardData özelliği (clipboard olayları) 198

clipboardData özelliği (HTML copy-and-paste olayları) 139

ClipboardFormats sınıfı 143

ClipboardTransferModes sınıfı 144

close olayı 71

close() yöntemi

NativeWindow sınıfı 67

close() yöntemi (window nesnesi) 54

closing olayı 67, 71, 227, 262

complete olayı 215, 218, 224

compress() yöntemi (ByteArray sınıfı) 151

CompressionAlgorithm sınıfı 151

content öğesi (uygulama tanımlayıcı dosyası) 46

contenteditable niteliği (HTML) 132

contextmenu olayı 84

ContextMenu sınıfı 80, 83

ContextMenuEvent sınıfı

contextMenuOwner özelliği 83

mouseTarget özelliği 83

ContextMenuItem sınıfı 80

contextMenuOwner özelliği (ContextMenuEvent sınıfı) 83

çöp kutusu (dosya silme) 110

copy olayı 139

copy() yöntemi (NativeApplication sınıfı) 141

copyTo() yöntemi (File sınıfı) 109

copyToAsync() yöntemi (File sınıfı) 109

CREATE TABLE ifadesi (SQL) 162

createDirectory() yöntemi (File sınıfı) 106

createElement() yöntemi (Document nesnesi) 211

createRootWindow() yöntemi (HTMLLoader sınıfı) 60, 62, 206

createTempDirectory() yöntemi (File sınıfı) 107, 111

createTempFile() yöntemi (File sınıfı) 111

creationDate özelliği (File sınıfı) 108

creator özelliği (File sınıfı) 108

CSS

AIR uzantıları 204

HTML stillerine ActionScript'ten erişme 218

Ctrl tuşu 80

currentDirectory özelliği (InvokeEvent sınıfı) 258

Page 327: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

320ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

currentDomain özelliği (ApplicationDomain sınıfı) 214

customItems özelliği (ContextMenu sınıfı) 83

customUpdateUI öğesi (uygulama tanımlayıcı dosyası) 47, 257, 291

cut olayı 139

Ď

data özelliği

NativeMenuItem sınıfı 81

DataTransfer nesnesi

types özelliği 133

DataTransfer nesnesi (HTML sürükle ve bırak) 130, 131, 132, 133, 198

deactivate olayı 71

default_badge.html 277

deflate sıkıştırma 151

değiştirici tuşlar, menü öğeleri 80

DELETE ifadesi (SQL) 177

deleteDirectory() yöntemi (File sınıfı) 108

deleteDirectoryAsync() yöntemi (File sınıfı) 108

deleteFile() yöntemi (File sınıfı) 110

deleteFileAsync() yöntemi (File sınıfı) 110

description öğesi (uygulama tanımlayıcı dosyası) 44

designMode özelliği (Document nesnesi) 132, 199

desktopDirectory özelliği (File sınıfı) 99

Dictionary sınıfı 212

dijital haklar yönetimi 248

dijital imzalar 284, 306, 310

dinamik kod oluşturma 31

dispatchEvent() yöntemi (NativeWindow sınıfı) 55

display() yöntemi (NativeMenu sınıfı) 87

displayState özelliği (Stage sınıfı) 72

displayStateChange olayı 55, 71

displayStateChanging olayı 55, 71

dizin oluşturma 106

dizin seçici iletişim kutuları 101

dizinler 99, 106

başvurma 99

kopyalama 107

numaralandırma 107

oluşturma 106

silme 108, 110

taşıma 107

uygulama başlatma 258

dizinleri kopyalama 107

dizinleri numaralandırma 107

dizinleri silme 108, 110

dizinleri taşıma 107

dizinleri temizleme 108

dışarı sürükleme hareketi 122, 124

Dock menüleri 78

dock simgeleri 93

destek 92

menüler 81

pencereyi simge durumuna küçültme ve 66

zıplatma 93

Document nesnesi

createElement() yöntemi 211

designMode özelliği 132, 199

stylesheets özelliği 218

wirtelin() yöntemi 198

write() yöntemi 32, 198, 211

writeln() yöntemi 32, 211

documentRoot niteliği (kare ve iframe öğeleri) 29, 193, 201, 220

documentRoot nitelikleri (kare ve iframe öğeleri) 29

documents dizini 99

documentsDirectory özelliği (File sınıfı) 99

doDrag() yöntemi (NativeDragManager sınıfı) 123, 124, 127

dominitialize olayı 201

dosya API'si 97

dosya listeleri

sürükle ve bırak desteği 130

dosya seçici iletişim kutuları 102

dosya sistemi

güvenlik 37

dosya sistemi API'si 97

dosya sistemiyle yerel sanal alan 26, 194

dosya türlerini kaydetme 265

dosya türü ilişkilendirmeleri 48, 258, 265

dosya URL şeması 37, 103, 212

dosyalar

başvurma 101

kopyala ve yapıştır desteği 137

kopyalama 109

okuma 111

silme 110

sürükle ve bırak desteği 122

taşıma 109

veritabanı 158

yazma 111

dosyaları kopyalama 109

dosyaları okuma 111

dosyaları silme 110

dosyaları taşıma 109

dosyaları yazma 111

DPAPI (şifreli verilerin kullanıcılarla ilişkilendirilmesi) 189

drag olayı 129, 198

dragend olayı 129, 198

dragenter olayı 129, 198

dragleave olayı 129, 198

dragover olayı 129, 198

dragstart olayı 129, 198

DRM 248

kimlik bilgileri 254

DRMAuthenticateEvent sınıfı 249, 253

DRMErrorEvent sınıfı 249

hata kodları 254

subErrorID özelliği 254

DRMStatusEvent sınıfı 249

drop olayı 129, 198

dropAction özelliği (NativeDragEvent sınıfı) 126, 127

dropEffect özelliği (DataTransfer nesnesi) 130, 131, 198

É

effectAllowed özelliği (DataTransfer nesnesi) 130, 131, 132, 198

eklentiler (HTML'de) 193

ekranlar 73

ana 74

numaralandırma 74

pencereler,taşınan 74

ekranları numaralandırma 74

encoding özelliği (File sınıfı) 106

EncryptedLocalStore sınıfı 189

Endian.BIG_ENDIAN 150

Endian.LITTLE_ENDIAN 150

enterFrame olayı 63

error olayı 166

etki alanları arası önbellek güvenliği 28

etkin menü öğeleri 81

etkin pencere 65

etkinlik (kullanıcı), saptama 266

eval() işlevi 28, 31, 195, 207, 208

execute() yöntemi (SQLStatement sınıfı) 167, 169, 176

exists özelliği (File sınıfı) 108

exit() yöntemi

NativeApplication sınıfı 262

exiting olayı 262

Page 328: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

321ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

F

File sınıfı 97, 98

applicationStorageDirectory özelliği 98

browseForDirectory() yöntemi 101

browseForOpen() yöntemi 102

browseForSave() yöntemi 102

copyTo() yöntemi 109

copyToAsync() yöntemi 109

createDirectory() yöntemi 106

createTempDirectory() yöntemi 107, 111

createTempFile() yöntemi 111

creationDate özelliği 108

creator özelliği 108

deleteDirectory() yöntemi 108

deleteDirectoryAsync() yöntemi 108

deleteFile() yöntemi 110

deleteFileAsync() yöntemi 110

desktopDirectory özelliği 98

documentsDirectory özelliği 98

encoding özelliği 106

exists özelliği 108

getDirectoryListingAsync() yöntemi 107

getRootDirectories() 98

getRootDirectories() yöntemi 98

isDirectory özelliği 108

lineEnding özelliği 106

modificationDate özelliği 108

moveTo() yöntemi 109

moveToAsync() yöntemi 109

moveToTrash() yöntemi 110

moveToTrashAsync() yöntemi 110

name özelliği 108

nativePath özelliği 98, 108

parent özelliği 108

relativize() yöntemi 103

resolvePath() yöntemi 98

separator özelliği 106

size özelliği 108

spaceAvailable özelliği 105

type özelliği 108

url özelliği 98, 108

userDirectory özelliği 98

yerel bir veritabanına başvurma 161

FileMode sınıfı 97

filename öğesi (uygulama tanımlayıcı dosyası) 43

FileStream sınıfı 97

fileTypes öğesi (uygulama tanımlayıcı dosyası) 48, 265

Flash belgeleri 9

Flash Media Rights Management Server 248

Flash Player 49, 191, 194, 212

FlashVars ayarları (badge.swf'yi kullanmak için) 277

Flex

sürükle ve bırak desteği 124

FLV videoları, şifreleme 248

FMRMS (Flash Media Rights Management Server) 248

G

geçici dizinler 107

geçici dosyalar 111

gecikmeli oluşturma (kopyalama ve yapıştırma) 145

generalClipboard özelliği (Clipboard sınıfı) 137

gereksinimler

PDF oluşturma 244

getApplicationVersion() yöntemi (air.swf dosyası) 281

getData() yöntemi

Clipboard sınıfı 127

ClipboardData nesnesi 197

DataTransfer nesnesi 133, 198

HTML copy-and-paste olayı 139

getData() yöntemi (bir HTML drag olayının dataTransfer özelliğine ait) 130

getData() yöntemi (Clipboard sınıfı) 123

getDefaultApplication() yöntemi (NativeApplication sınıfı) 265

getDirectoryListing() yöntemi (File sınıfı) 107

getDirectoryListingAsync() yöntemi (File sınıfı) 107

getResult() yöntemi (SQLStatement sınıfı) 176

getScreensForRectangle() yöntemi(Screen sınıfı) 74

getStatus() yöntemi (air.swf dosyası) 280

gömülü nesneler (HTML'de) 193

göreceli yollar (dosyalar arasında) 103

görev çubuğu simgeleri 66, 92

görüntü nesneleri (ActionScript) 64

görüntü sırası, pencereler 66

görüntüler

Bkz. ekranlar

gözatma

dizin seçmek için 101

dosya seçmek için 102

güvenlik

Ajax çerçeveleri 32

asfunction protokolü 28

çapraz komut dosyası 34

CSS 29

dinamik kod oluşturma 31

dosya sistemi 37

en iyi uygulamalar 39

etki alanları arası önbellek 28

eval() işlevi 31

HTML 29, 31, 191, 193, 207

içerik yükleme 61

iframe'ler 29

img etiketleri 28

indirgeme saldırıları 40

JavaScript 220

JavaScript hataları 207

kareler 29

kullanıcı kimlik bilgileri 40

Loader.loadBytes() yöntemi 39

metin alanları 28

Pano 138

sanal alan köprüleri 30, 34, 220

sanal alanlar 26, 193, 194, 220, 266

tarayıcı başlatma özelliği 261

uygulama depolama dizini 25

uygulama dışı sanal alanlar 28

uygulama sanal alanı 26

verileri şifreleme 189

veritabanı 168

XMLHTTPRequest 201

XMLHttpRequest nesneleri 33

yükleme (uygulama ve çalışma zamanı) 23

yükleme için kullanıcı ayrıcalıkları 23

GZIP formatı 151

H

hafif pencereler 56

hasEventListener() yöntemi 229

hata kodları

DRM 254

height öğesi (uygulama tanımlayıcı dosyası) 46

height özelliği (HTMLLoader sınıfı) 206

hizmet pencereleri 56

hostContainer özelliği (PDF) 246

HTML

AIR uzantıları 201

DOM, ActionScript'ten erişim 215

Page 329: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

322ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

eklentiler 193

gömülü nesneler 193

güvenlik 29, 193, 220

kaydırma 224

kopyala ve yapıştır 139

olaylar 224

pencereler 60

sanal alanlar 194

sürükle ve bırak desteği 122, 130

SWF içeriğini kaplama 62

yazdırma 194

yükleme içeriği 206

HTML DOM ve yerel pencereler 54

htmlBoundsChanged olayı 224

htmlDOMInitialize olayı 224

htmlLoader özelliği (Window nesnesi) 192, 200, 206

htmlLoader özelliği (window nesnesi) 61

HTMLLoader sınıfı 206

createRootWindow() yöntemi 60, 62, 206

height özelliği 206

JavaScript erişimi 192

kopyala ve yapıştır 138

loadString() yöntemi 206

olaylar 224

paintsDefaultBackground özelliği 57, 63

pdfCapability özelliği 244

runtimeApplicationDomain özelliği 214

width özelliği 206

HTMLPDFCapability sınıfı 244

HTMLUncaughtScriptException sınıfı 225

Í

içeri sürükleme hareketi 122, 126

icon öğesi (uygulama tanımlayıcı dosyası) 47

icon özelliği (NativeApplication sınıfı) 92

Icon sınıfı

bitmaps özelliği 92

bounce() yöntemi 93

id öğesi (NativeApplication sınıfı) 264

id öğesi (uygulama tanımlayıcı dosyası) 43

idleThreshold özelliği (NativeApplication sınıfı) 266

ifadeler, SQL 166

iframe öğeleri 29, 193, 195, 201

iki nokta (\

) karakteri, SQL ifadesi parametre adlarında 167

ikili veriler

Bkz. bayt dizileri

ilişkisel veritabanları

Bkz. veritabanları

img etiketleri (TextField nesnesi içeriğinde) 28

imleç, sürükle ve bırak efektleri 127, 131

imzalar

geçirme 287, 312

indirgeme saldırıları ve güvenlik 40

Info.plist dosyaları (Mac OS) 45

initialWindow öğesi (uygulama tanımlayıcı dosyası) 45, 54

innerHTML özelliği 32, 198, 211

INSERT ifadesi (SQL) 181

installApplication() yöntemi (air.swf dosyası) 281

installFolder öğesi (uygulama tanımlayıcı dosyası) 45

INTEGER PRIMARY KEY sütunları (SQL) 177

invoke olayı 257

InvokeEvent sınıfı 48, 258

arguments özelliği 258

currentDirectory özelliği 258

işaretli menü öğeleri 81

isDirectory özelliği (File sınıfı) 108

isHTTPS özelliği (BrowserInvokeEvent sınıfı) 261

İşlev yapıcıları (JavaScript'te) 195

işlevler (JavaScript)

değişmezler 31

tanımlar 31

yapıcı 210

isSetAsDefaultApplication() yöntemi (NativeApplication sınıfı) 265

J

Java Cryptography Architecture (JCA) 310

JavaScript

ActionScript çapraz komut dosyası 213

AIR API'lere erişim 211

AIR çalışma zamanı ve 191

AIR desteği 194

AIRAliases.js dosyası 192, 212

error olayları 224

güvenlik 220

güvenlik hatalarını önleme 207

hatalar 207, 214, 225, 228

olaylar, işleme 227

PDF 245

programlama 206

JavaScript güvenliği 31

JavaScript URL şeması 32, 210

javascript URL şeması 200

JavaSoft geliştirici sertifikaları 285

JSON 195

K

kaldırma

AIR çalışma zamanı 2

AIR uygulamaları 26

kare öğeleri 193, 195, 201

kareler 29

kendinden imzalı sertifikalar 40, 284, 313

Keyboard sınıfı 80

KeyChain (şifreli verilerin kullanıcılarla ilişkilendirilmesi) 189

keyEquivalent özelliği (NativeMenuItem sınıfı) 80

keyEquivalentModifiers özelliği (NativeMenuItem sınıfı) 80

kimlik bilgileri

DRM şifreli içerik için 254

klavye kısayolları

kopyala ve yapıştır 140

kod imzalama 40, 284

kök birimler 99

komut dosyası etiketleri 195, 198, 210, 212, 216

src özelliği 32

komut satırı argümanları, yakalama 258

Komut tuşu 80

komutlar, menü

Bkz. menü öğeleri

kopyala ve yapıştır

aktarım modları 144

HTML 139, 197

klavye kısayolları 140

menü komutları 140

varsayılan menü öğeleri (Mac OS) 141

kopyalama ve yapıştırma

gecikmeli oluşturma 145

kullanıcı adları

şifreli ortam içeriği için ayar 248

kullanıcı etkinliği, saptama 266

kullanıcı kimlik bilgileri ve güvenlik 40

L

label özelliği (NativeMenuItem sınıfı) 141

lastInsertRowID özelliği (SQLResult sınıfı) 176

lastUserInput özelliği (NativeApplication sınıfı) 266

Page 330: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

323ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

length özelliği (ByteArray sınıfı) 149

lineEnding özelliği (File sınıfı) 106

listRootDirectories() yöntemi (File sınıfı) 99

little-endian bayt sırası 150

load olayı 193, 195, 207, 215

load olayları 211

loadBytes() yöntemi (Loader sınıfı) 39

Loader sınıfı 61

Loader.loadBytes() yöntemi 39

LoaderContext sınıfı

allowLoadBytesCodeExecution özelliği 39

applicationDomain özelliği 34

securityDomain özelliği 34

LoaderInfo sınıfı

childSandboxBridge özelliği 34

parentSandboxBridge özelliği 34

loadString() yöntemi (HTMLLoader sınıfı) 206

LocalConnection sınıfı 276, 283

locationChange olayı 224

M

Mac OS

araç çubuğu 58

proxy simgeleri 58

mainScreen özelliği (Screen sınıfı) 74

makbuzlar, DRM şifreli içerikle kullanma 248

masaüstü dizini 99

masaüstü pencereleri

Bkz. pencereler

maximizable öğesi (uygulama tanımlayıcı dosyası) 46

maximize() yöntemi (NativeWindow sınıfı) 67

maxSize öğesi (uygulama tanımlayıcı dosyası) 46

menü

olaylar 89

uygulama 89

yapı 79

menü çubukları 79

menü komutları için hızlandırıcı tuşlar 80

menü komutları için tuş eşdeğerleri 80

menü öğeleri 79

anımsatıcı karakterler 80

data, atama 81

durumlar 81

etkin 81

hızlandırıcı tuşlar 80

işaretli 81

kopyala ve yapıştır 141

oluşturma 82

seçme 88

tuş eşdeğerleri 80

menuItemSelect olayları 80

menüler 77

açılır 81, 87

alt menüler 79, 82

ayırıcı satırlar 83

bağlam menüleri 83

birlikte çalışılacak sınıflar 78

dock 78

dock öğesi 81

kopyala ve yapıştır komutları 140

öğeler 79

olay akışı 79, 87

oluşturma 81

özel 78

pencere 81, 89

sistem tepsisi simgeleri 78

sistem tepsisi simgesi 81

türleri 78

tuş eşdeğerleri 80

uygulama 81

varsayılan sistem 78

XML, tanımlama 85

yapı 78

menuSelect olayları 80

messageHandler özelliği (PDF) 246

metin

kopyala ve yapıştır desteği 137

sürükle ve bırak desteği 122, 130

Microsoft authenticode digital ID'ler 285

Microsoft authenticode sertifikaları 285

Microsoft Windows

başlık çubuğu simgeleri 58

MIME türleri

HTML kopyala ve yapıştır 143, 197

HTML sürükle ve bırak 130

minimizable öğesi (uygulama tanımlayıcı dosyası) 46

minimize() yöntemi (NativeWindow sınıfı) 67

minimumPatchLevel niteliği (uygulama tanımlayıcı dosyası) 42

minSize öğesi (uygulama tanımlayıcı dosyası) 46

mnemonicIndex özelliği

NativeMenuItem sınıfı 80

modificationDate özelliği (File sınıfı) 108

monitörler

Bkz. ekranlar

mouseDown olayı 69, 123

mouseMove olayı 123

mouseTarget özelliği (ContextMenuEvent sınıfı) 83

move olayı 55, 71

moveTo() yöntemi

File sınıfı 109

Window nesnesi 54

moveToAsync() yöntemi (File sınıfı) 109

moveToTrash() yöntemi (File sınıfı) 110

moveToTrashAsync() yöntemi (File sınıfı) 110

moving olayı 71

Ň

name öğesi (uygulama tanımlayıcı dosyası) 44

name özelliği (File sınıfı) 108

NativeApplication sınıfı 200

activeWindow özelliği 65

addEventListener() yöntemi 257

applicationDescriptor özelliği 264

autoExit özelliği 262

copy() method() 141

exit() yöntemi 262

getDefaultApplication() yöntemi 265

icon özelliği 92

id özelliği 264

idleThreshold özelliği 266

isSetAsDefaultApplication() yöntemi 265

lastUserInput özelliği 266

publisherID özelliği 264, 285

removeAsDefaultApplication() yöntemi 265

runtimePatchLevel özelliği 266

runtimeVersion özelliği 266

setAsDefaultApplication() yöntemi 48

startAtLogin özelliği 260

supportsDockIcon özelliği 92

supportsMenu özelliği 89

supportsSystemTrayIcon özelliği 92

NativeApplication.setAsDefaultApplication() yöntemi 265

NativeBoundsEvent sınıfı 71

nativeDragComplete olayı 123, 126, 128

nativeDragDrop olayı 123

nativeDragEnter olayı 123, 126, 127, 128

Page 331: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

324ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

NativeDragEvent sınıfı

clipboard özelliği 127

dropAction özelliği 126, 127

nativeDragExit olayı 123, 128

NativeDragManager sınıfı

acceptDragDrop() yöntemi 123, 127

doDrag() yöntemi 123, 124, 127

nativeDragOver olayı 123, 126, 127, 128

nativeDragStart olayı 123, 128

nativeDragUpdate olayı 123, 128

NativeMenu sınıfı 79, 87

NativeMenuItem sınıfı 79

alt menü özelliği 79

data özelliği 81

keyEquivalent özelliği 80

keyEquivalentModifiers özelliği 80

label özelliği 141

mnemonicIndex özelliği 80

nativePath özelliği (File sınıfı) 99, 108

nativeWindow özelliği

Stage sınıfı 59, 65

Window nesnesi 192, 199

nativeWindow özelliği (window nesnesi) 54, 61

NativeWindow sınıfı 53

activate yöntemi 65

activate yöntemi() 60

activate() yöntemi 66

addEventListener() yöntemi 71

alwaysInFront özelliği 66

başlatma 64

close() yöntemi. 67

dispatchEvent() yöntemi 55

JavaScript erişimi 192

maximize() yöntemi 67

minimize() yöntemi 67

olaylar 71

orderBehind() yöntemi 66

orderInBackOf() yöntemi 66

orderInFrontOf() yöntemi 66

orderToBack() yöntemi 66

orderToFront() yöntemi 66

restore() yöntemi 67

stage özelliği 63

startMove() yöntemi 69

startResize() yöntemi 69

systemChrome özelliği 56

systemMaxSize özelliği 60

systemMinSize özelliği 60

transparent özelliği 56, 57

type özelliği 56

visible özelliği 60, 65

yapıcı 60

NativeWindowDisplayStateEvent sınıfı 71

NativeWindowInitOptions sınıfı 59, 60

nesne başvuruları

kopyala ve yapıştır desteği 137

sürükle ve bırak desteği 122

nesne değişmezleri (JavaScript'te) 31

nesneleri serileştirme 124

NetStream sınıfı

resetDRMVouchers() yöntemi 250

setDRMAuthenticationCredentials() yöntemi 249, 250

Netstream sınıfı

şifreli içerik, oynatma 249

normal pencereler 56

NSHumanReadableCopyright alanı (Mac OS) 45

Ó

OID sütun adı (SQL) 177

olay seç 79, 88, 89

olayı görüntüleme 79, 89

olaylar

dinleyiciler 227

HTML 224

işleyiciler 227

menü 79, 87

NativeWindow sınıfı 71

yerel pencereler 55

ölçeklenebilir vektör grafikleri (SVG) 194

onclick işleyicisi 210

ondominitialize niteliği 201

onload işleyicisi 31

onmouseover işleyicisi 210

open() yöntemi

SQLConnection sınıfı 161

Window nesnesi 33, 60, 200

open() yöntemi (SQLConnection sınıfı) 161

openAsync() yöntemi (SQLConnection sınıfı) 161, 164

opener özelliği (window nesnesi) 61

orderBehind() yöntemi (NativeWindow sınıfı) 66

orderInBackOf() yöntemi (NativeWindow sınıfı) 66

orderInFrontOf() yöntemi (NativeWindow sınıfı) 66

orderToBack() yöntemi (NativeWindow sınıfı) 66

orderToFront() yöntemi (NativeWindow sınıfı) 66

örnek uygulamalar 2

otomatik başlatma (bir AIR uygulamasını oturum açılırken başlatma) 260

oturum açma, bir AIR uygulamasını başlatma 260

outerHTML özellikleri 198

özel anahtarlar 310

özel güncelleme kullanıcı arabirimi 291

özel krom 56

Özellikler

language özelliği 295

languages özelliği 295

P

P12 dosyaları 285

paintsDefaultBackground özelliği (HTMLLoader sınıfı) 57, 63

Pano

güvenlik 138

kopyala ve yapıştır 137

Sistem 137

veri formatları 143, 144

parameters özelliği (SQLStatement sınıfı) 166, 167

parametreler, SQL ifadelerinde 167

parent özelliği (File sınıfı) 108

parent özelliği (window nesnesi) 61

parentSandboxBridge özelliği

LoaderInfo sınıfı 34

Window nesnesi 30

Window nesnesi) 200

parentSandboxBridge özelliği (Window nesnesi) 221

PDF

destek 193, 244

PDF içeriği

AIR uygulamasına ekleme 244

bilinen sınırlamalar 247

JavaScript iletişimi 245

yükleme 245

pdfCapability özelliği (HTMLLoader sınıfı) 244

pencere

kapatma 262

pencere menüleri 77, 89

oluşturma 81

pencereler

arka plan 57

başlatma 58

Page 332: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

325ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

boyut 60

boyutu 46

büyütme 46, 55, 67

çalışılacak sınıflar 54

davranış 56

dikdörtgen olmayan 57

etkin 65, 66

etkinleştirme 60

gizleme 65

görüntü sırası 66

görünüm 56

görünürlük 46

gösterme 65

hafif 56

hizmet pencereleri 56

ilk 54

kapatma 55, 67

konum 46

krom 56

küçültme 46

maksimum boyut 60

minimum boyut 60

normal pencereler 56

olay akışı 55

olaylar 71

oluşturma 58, 64, 206

özel krom 56

özellikler 45

sahne ölçek modları 60

saydamlık 46

şeffaflık 57

simge durumuna küçültme 55, 66, 67

sistem kromu 56

sıra 66

stil 56

taşıma 55, 69, 74

türler 56

yeniden boyutlandırma 46, 55, 69

yeniden yükleme 55, 67

yönetme 65

pencereleri büyütme 46, 55, 67

pencereleri etkinleştirme 60, 66

pencereleri gizleme 65

pencereleri gösterme 65

pencereleri kapatma 55, 67, 262

pencereleri küçültme 46

pencereleri simge durumuna küçültme 55, 66, 67

pencereleri sıralama 66

pencereleri taşıma 55, 69

pencereleri yeniden boyutlandırma 46, 55, 69

pencereleri yeniden yükleme 55, 67

pencerelerin arka planı 57

pencerelerin boyutu 46

pencerelerin görünümü 56

pencerelerin görünürlüğü 46

pencerelerin konumu 46

pencerelerin sırası 66

PFX dosyaları 285

playerType özelliği

Capabilities sınıfı 266

position özelliği (ByteArray sınıfı) 149

postMessage() yöntemi (PDF nesnesi) 246

print() yöntemi (Window nesnesi) 194

Program Dosyaları dizini (Windows) 275

programMenuFolder öğesi (uygulama tanımlayıcı dosyası) 45

proxy simgeleri

Mac OS 58

publisherid dosyası 264

publisherID özelliği (NativeApplication sınıfı) 264, 285

Ř

readBytes() yöntemi (ByteArray sınıfı) 148

readFloat() yöntemi (ByteArray sınıfı) 148

readInt() yöntemi (ByteArray sınıfı) 148

readObject() yöntemi (ByteArray sınıfı) 148

readUTFBytes() yöntemi (ByteArray sınıfı) 148

relativize() yöntemi (File sınıfı) 103

removeAsDefaultApplication() yöntemi (NativeApplication sınıfı) 265

removeEventListener() yöntemi 228

resetDRMVouchers() yöntemi (NetStream sınıfı) 250

resizable öğesi (uygulama tanımlayıcı dosyası) 46

resize olayı 55, 71

resizing olayı 71

resolvePath() yöntemi (File sınıfı) 99

Responder sınıfı 166, 176

restore() yöntemi (NativeWindow sınıfı) 67

result olayı 166

ROWID sütun adı (SQL) 177

_ROWID_ sütun adı (SQL) 177

runtime özelliği (Window nesnesi) 61, 192, 199, 211

runtimeApplicationDomain özelliği (HTMLLoader sınıfı) 214

runtimePatchLevel özelliği (NativeApplication sınıfı) 266

runtimeVersion özelliği (NativeApplication sınıfı) 266

Š

sanal alan köprüleri 30, 34, 193, 194, 208, 220

sanal alanlar 26, 194, 220, 266

sandboxRoot niteliği (kare ve iframe öğeleri) 193, 220

sandboxRoot niteliği (kare ve öğeleri) 196, 201

sandboxRoot özelliği

iframe 29

kare 29

sandboxType özelliği

BrowserInvokeEvent sınıfı 261

Security sınıfı 266

satırlar (veritabanı) 158, 176

saydam pencereler 46

scaleMode özelliği

Stage sınıfı 69

Screen sınıfı 73

getScreenForRectangle() yöntemi 74

mainScreen özelliği 74

screens özelliği 74

screens özelliği (Screen sınıfı) 74

screenX özelliği (HTML drag olayları) 130

screenY özelliği (HTML drag olayları) 130

scroll olayı 224

security

window.open() 33

Security sınıfı

allowDomain() yöntemi 34, 38

sandboxType özelliği 266

securityDomain özelliği (BrowserInvokeEvent sınıfı) 261

şeffaf pencereler 57

SELECT ifadesi (SQL) 169, 181

senkronize olmayan programlama

dosya sistemi 97

veritabanları 160, 164, 181

XMLHttpRequests 211

senkronize programlama

dosya sistemi 97

veritabanları 160, 164, 181

XMLHttpRequests 211

separator özelliği (File sınıfı) 106

Page 333: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

326ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

serileştirilmiş nesneler

kopyala ve yapıştır desteği 137

sürükle ve bırak desteği 122

sertifika iptal listesi (CRL) 288

sertifika uygulama bildirimi (CPS) 288

sertifika yetkilileri (CA'lar) 284

sertifikalar

ADT komut satırı seçenekleri 310

AIR dosyalarını imzalama 284

değiştirme 287, 312

formatlar 285

geçiş 287, 312

kod imzalama 40

süresi dolan 285

yetkililer (CA'lar) 40

zincirler 288

setAsDefaultApplication() yöntemi (NativeApplication sınıfı) 48, 265

setData() yöntemi

ClipboadData nesnesi 197

Clipboard yöntemi 145

DataTransfer nesnesi 130, 132, 198

setDataHandler() yöntemi (Clipboard sınıfı) 145

setDragImage() yöntemi (bir HTML drag olayının dataTransfer özelliğine ait) 130

setDRMAuthenticationCredentials() yöntemi (NetStream sınıfı) 249, 250

setInterval() işlevi 32, 200, 209

setTimeout() işlevi 32, 200, 209

Shift tuşu 80

şifreleme 248

şifreler

şifreli ortam içeriği için ayar 248

şifreli veriler, saklama ve alma 189

şifreli verileri güçlü ciltleme 189

simgeler

dock 92, 93

görev çubuğu 66, 92

görüntüler 92

hareketlendirme 92

kaldırma 92

sistem tepsisi 92

uygulama 47

sistem kromu 56

HTML pencereleri 60

sistem tepsisi simgeleri 78, 81

destek 92

sistemde oturum açma, bir AIR uygulamasını başlatma 260

size özelliği (File sınıfı) 108

soru işareti (?) karakter, adlandırılmamış SQL parametrelerinde 168

spaceAvailable özelliği (File sınıfı) 105

SQL

adlandırılmamış parametreler (ifadelerde) 168

adlandırılmış parametreler (ifadelerde) 167

AUTOINCREMENT sütunları 177

CREATE TABLE ifadesi 162

DELETE ifadesi 177

hakkında 159

ifadeler 165, 166

ifadelerdeki parametreler 167

INSERT ifadesi 181

INTEGER PRIMARY KEY sütunları 177

kullanılan sınıflar 159

OID sütun adı 177

ROWID sütun adı 177

_ROWID_ sütun adı 177

SELECT ifadesi 169, 181

UPDATE ifadesi 177

veri türleme 168, 181

SQLCollationType sınıfı 159

SQLColumnNameStyle sınıfı 159

sqlConnection özelliği (SQLStatement sınıfı) 166

SQLConnection sınıfı 159

attach() yöntemi 178

open yöntemi 161

open() yöntemi 161

openAsync() yöntemi 161, 164

SQLError sınıfı 159, 166

SQLErrorEvent sınıfı 159, 166

SQLEvent sınıfı 159

SQLIndexSchema sınıfı 159

SQLLite veritabanı desteği 157

Ayrıca bkz. veritabanları

SQLMode sınıfı 159, 165

SQLResult sınıfı 159

SQLSchemaResult sınıfı 159

SQLStatement sınıfı 159, 165

execute yöntemi 167

execute() yöntemi 169, 176

getResult() yöntemi 176

parameters nesnesi 166

parameters özelliği 167

sqlConnection özelliği 166

text özelliği 166, 167, 169, 177

SQLTableSchema sınıfı 159

SQLTransactionLockType sınıfı 159

SQLTriggerSchema sınıfı 159

SQLUpdateEvent sınıfı 159

SQLViewSchema sınıfı 159

stage özelliği

NativeWindow sınıfı 63

Stage sınıfı

addChild() yöntemi 63

addChildAt() yöntemi 63

displayState özelliği 72

nativeWindow özelliği 59, 65

scaleMode özelliği 60, 69

StageDisplayState sınıfı 72

StageScaleMode sınıfı 60, 69

startAtLogin özelliği (NativeApplication sınıfı) 260

startMove() yöntemi (NativeWindow sınıfı) 69

startResize() yöntemi (NativeWindow sınıfı) 69

StatusEvent sınıfı 249

stil sayfaları, HTML

ActionScript'te değiştirme 218

styleSheets özelliği (Document nesnesi) 218

subErrorID özelliği (DRMErrorEvent sınıfı) 254

Sun Java signing digital ID'ler 285

supportsDockIcon özelliği (NativeApplication sınıfı) 92

supportsMenu özelliği (NativeApplication sınıfı) 89

supportsSystemTrayIcon özelliği (NativeApplication sınıfı) 92

sürükle ve bırak

aktarım formatları 122

değiştirici tuşlar 127

Flex desteği 124

hareketler 122

HTML 128, 198

HTML'de varsayılan davranış 129

HTML'deki olaylar 129

ilgili sınıflar 122

imleç efektleri 127, 131

uygulama dışı sanal alan içeriğine (HTML'de) 135

sürükleme sırasında fare konumu 128

sürümler, AIR uygulaması 266

sütunlar (veritabanı) 158

SWF dosyaları

komut dosyası etiketi yoluyla yükleme 216

Page 334: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

327ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

SWF içeriği

HTML'de 193

HTML'nin üzerini kaplama 62

systemChrome özelliği (NativeWindow sınıfı) 56

systemMaxSize özelliği (NativeWindow sınıfı) 60

systemMinSize özelliği (NativeWindow özelliği) 60

Ť

tablolar (veritabanı) 158

oluşturma 162

tam ekran pencereler 72

tanımlama bilgileri 197

tarayıcı başlatma özelliği 47, 260

teknik destek 9

text özelliği (SQLStatement sınıfı) 166, 167, 169, 177

TextField sınıfı

HTML yükleme yeri 206

img etiketleri 28

kopyala ve yapıştır 138

Thawte sertifikaları 284, 285

title öğesi (uygulama tanımlayıcı dosyası) 46

tost stili pencereler 66

transparent öğesi (uygulama tanımlayıcı dosyası) 46

transparent özelliği (NativeWindow sınıfı) 56, 57

type özelliği (File sınıfı) 108

type özelliği (NativeWindow sınıfı) 56

types özelliği

DataTransfer nesnesi 198

HTML copy-and-paste olayı 139

HTML drag olayı 130

types özelliği (DataTransfer nesnesi) 133

Ú

uncaughtScriptExcpetion olayı 224

uncompress() yöntemi (ByteArray sınıfı) 151

unload olayları 199

UntrustedAppInstallDisabled (Windows kayıt defteri ayarları) 26

UPDATE ifadesi (SQL) 177

update() yöntemi (Updater sınıfı) 290

UpdateDisabled (Windows kayıt defteri ayarları) 26

Updater sınıfı 290

url özelliği

File sınıfı 99, 108

url özelliği (File sınıfı) 99

URL şemaları 103

URL'ler 212

kopyala ve yapıştır desteği 137

sürükle ve bırak desteği 122, 130

URLs

HTML içeriği yükleme 206

URLStream sınıfı 195

userDirectory özelliği (File sınıfı) 99

userIdle olayı 266

userPresent olayı 266

uyg. depolama URL şeması 103

uyg. URL şeması 103, 194

uygulama depolama dizini 25, 99, 103, 212

uygulama depolama URL şeması 25

uygulama dizini 99

uygulama dışı sanal alanlar 28, 135, 194, 207, 208, 220

uygulama kimlikleri 43

uygulama menüleri 77, 89

oluşturma 81

uygulama olmayan sanal alanlar 193

uygulama sanal alanı 26, 193, 194, 206, 207, 208, 210, 220, 266

uygulama tanımlayıcı dosyası 41

uygulama tanımlayıcı özelliği

okuma 264

uygulamalar

Bkz. AIR uygulamaları

uygulamaları çevirme 294

uygulamaları kapatma 262

uzak sanal alanlar 26, 194

uzantılar (dosya), AIR uygulamasıyla ilişkili 265

V

veri doğrulaması, uygulama başlatma 261

veri formatları, Pano 143

veri şifreleme 189

veri türleri, veritabanı 181

verileri sıkıştırma 151

Verisign sertifikaları 284, 285

veritabanı

hatalar 178

kullanılan sınıflar 159

veritabanına bağlanma 164

veritabanları

alanlar 158

ana anahtarlar 176, 177

bağlanma 164

bellek içi 161

çoklu, çalışma 178

dosyalar 158

güvenlik 168

hakkında 158

kullanımlar 158

oluşturma 161

performans 168

satır kimlikleri 177

satırlar 158

senkronize mod 160

senkronize olmayan mod 160

sütunlar 158

tablolar 158, 162

veri alma 169

veri türleme 168, 181

verileri değiştirme 177

verileri silme 177

yapı 158

version öğesi (uygulama tanımlayıcı dosyası) 43

video içeriğini şifreleme 248

visible öğesi (uygulama tanımlayıcı dosyası) 46

visible özelliği

NativeWindow sınıfı 60, 65

W

web tarayıcıları

AIR çalışma zamanını saptama 280

AIR uygulamalarını başlatma 282

AIR uygulamalarını yükleme 281

AIR uygulamasının yüklenip yüklenmediğini saptama 281

bir AIR uygulamasını başlatma 260

WebKit 191, 193, 204

-webkit-border-horizontal-spacing CSS özelliği 204

-webkit-border-vertical-spacing CSS özelliği 204

-webkit-line-break CSS özelliği 204

-webkit-margin-bottom-collapse CSS özelliği 204

-webkit-margin-collapse CSS özelliği 204

-webkit-margin-start CSS özelliği 204

-webkit-margin-top-collapse CSS özelliği 204

-webkit-nbsp-mode CSS özelliği 204

-webkit-padding-start CSS özelliği 204

-webkit-rtl-ordering CSS özelliği 204

-webkit-text-fill-color CSS özelliği 204

-webkit-text-security CSS özelliği 205

Page 335: FLASH CS4 PROFESSIONAL ile ADOBE AIR 1.1  · PDF fileHTML güvenliği ... Ağ bağlantısı değişikliklerini saptama

328ADOBE FLASH CS4 PROFESSIONAL ILE ADOBE AIR 1.1 UYGULAMALARI GELIŞTIRME

Dizin

-webkit-user-drag CSS özelliği 129, 205, 132

-webkit-user-modify CSS özelliği 205

-webkit-user-select CSS özelliği 129, 132, 205

width öğesi (uygulama tanımlayıcı dosyası) 46

width özelliği (HTMLLoader sınıfı) 206

Window nesnesi

childSandboxBridge özelliği 30

close() yöntemi 54

htmlLoader nesnesi 192

htmlLoader özelliği 61, 200, 206

moveTo() yöntemi 54

nativeWindow nesnesi 192

nativeWindow özelliği 54, 61, 199

open yöntemi 200

open() yöntemi 33, 60

opener özelliği 61

parent özelliği 61

parentSandboxBridge özelliği 30, 200, 221

print() yöntemi 194

runtime özelliği 28, 32, 61, 192, 199, 211

Window sınıfı 53

WindowedApplication sınıfı 53

windows 53

Windows kayıt defteri ayarları 26

write() yöntemi (Document nesnesi) 198, 211

writeBytes() yöntemi (ByteArray sınıfı) 148

writeFloat() yöntemi (ByteArray sınıfı) 148

writeInt() yöntemi (ByteArray sınıfı) 148

writeln() yöntemi (Document nesnesi) 198, 211

writeObject() yöntemi (ByteArray sınıfı) 148

writeUTFBytes() yöntemi (ByteArray sınıfı) 148

X

x öğesi (uygulama tanımlayıcı dosyası) 46

XML

menü tanımlama yolu 85

sınıf 212

XML ad alanı (uygulama tanımlayıcı dosyası) 42

XMLHttpRequest nesnesi 33, 195, 201, 211

XMLList sınıfı 212

xmlns (uygulama tanımlayıcı dosyası) 42

Y

y öğesi (uygulama tanımlayıcı dosyası) 46

yama düzeyleri

AIR çalışma zamanı 266

yama düzeyleri, AIR çalışma zamanı 42

yayıncı adı 284

yayıncı kimlikleri 264, 285

yazdırma 194

yerel ayarlar, bir uygulama için seçme 295

yerel güvenilir sanal alan 26, 194

yerel menüler

Bkz. menüler

yerel pencereler

Bkz. pencereler

yerel veritabanları

Bkz. veritabanları

yerelleştirme 294

yol sınırlayıcı (dosya sistemi) 101

yollar (dosya ve dizin) 103

yollar, göreceli 103

yükleme

AIR çalışma zamanı 1

Ž

zaman damgaları 285

zengin internet uygulamaları (RIA'lar) 7

ZIP dosyası formatı 153

ZLIB sıkıştırma 151