フォーラム一覧   -   トピック一覧
   ActionScript 3.0
     ローカルのXMLにアクセス
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
AKIRA
投稿日時: 2006-9-11 10:01
ご主人様
登録日: 2006-3-20
居住地: 東京都千代田区
投稿: 119
ローカルのXMLにアクセス
毎度お世話になってます、AKIRAです。

今回のお題はひどく単純です。
HTTPServiceを利用してXMLにアクセスを行うというものです。
以下はソースです。
MainFrame.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
initialize="{initApp()}"
creationComplete="{creationCompleted()}" backgroundGradientColors="[#0000a0, #00ffff]" backgroundGradientAlphas="[0.23, 0.09]">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
import org.popup.ImagePopup;
import mx.rpc.soap.errors.ClientInputError;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
// import mx.rpc.http.mxml.HTTPService;
import mx.collections.ArrayCollection;
//メニューリンクデータ
[Bindable]
private var _MenuData:ArrayCollection = new ArrayCollection([
{label:"Image", url:"Image" ,level:"0" ,enabled:false, dispFlg:true},
{label:"Video", url:"Video" ,level:"0" ,enabled:false, dispFlg:true},
{label:"Maintenance",url:"Mainte" ,level:"0" ,enabled:false, dispFlg:true},
{label:"Logout",url:"Logout" ,level:"0" ,enabled:false, dispFlg:true}
]);
// [Bindable]
// private var _catalogDataService:HTTPService;


private function clickLogin():void {
currentState = "imageContents";
AppMenueBar.visible = true;
}
private function initApp():void {
}
private function creationCompleted():void {
// _catalogDataService = new HTTPService();
// _catalogDataService.url = "xml/catalog.xml";
// _catalogDataService.method = "GET";
// _catalogDataService.addEventListener(ResultEvent.RESULT,httpResultEventListner);
// _catalogDataService.addEventListener(FaultEvent.FAULT,httpFaultEventListner);
// _catalogDataService.send();
catalogService.send();
currentState = "login";
AppMenueBar.visible = false;
}
private function httpResultEventListner(obj:Object):void {
// var obj:Object = _catalogDataService.lastResult;
var obj:Object = catalogService.lastResult;
}
private function httpFaultEventListner(obj:Object):void {

}
public function clickMenu(obj:Object):void {
switch(obj.index) {
case 0:
currentState = "imageContents";
break;
case 1:
currentState = "videoContents";
break;
case 2:
break;
case 3:
this.creationCompleted();
break;
}
}
public function onMouseClickForImage(imageName:String):void {
var imagePopup:ImagePopup = new ImagePopup();
imagePopup.setImageName(imageName);
PopUpManager.addPopUp(imagePopup,this,true);
}
public function onMouseClickForDataGrid(obj:Object):void {
var imageName:String = obj.image;
this.onMouseClickForImage(imageName);
}

public function onMouseClickForSearch():void {
Alert.show("検索を行います。");
}
public function onMouseClickForOption():void {
Alert.show("Option設定を行います。");
}
]]>
</mx:Script>
<mx:HTTPService id="catalogService" useProxy="false" url="xml/catalog.xml" result="httpResultEventListner(event)" />
<!-- メニューバー -->
<mx:ApplicationControlBar id="AppMenueBar" width="100%" height="45"
fillColors="[#000066, #0000ff]" fillAlphas="[0.7, 0.0]"
horizontalGap="0"
verticalAlign="middle"
>
<mx:LinkBar enabled="true"
id="menuBar"
itemClick="{clickMenu(event)}"
fontSize="16"
horizontalAlign="left"
horizontalGap="4"
dataProvider="{_MenuData}"
/>
</mx:ApplicationControlBar>
<mx:Canvas id="contents" width="100%" height="100%"/>
<mx:states>
<mx:State name="login">
<mx:AddChild relativeTo="{contents}">
<!-- ログインボックス -->
<mx:VBox id="loginbox" width="50%" horizontalAlign="center" backgroundColor="#FFFFFF" backgroundAlpha="0.8" x="251" y="26">
<!-- タイトル -->
<mx:Label id="lbl1" fontSize="27" text="Welcome" fontStyle="normal" color="#FFFFFF"/>
<mx:Label id="lbl2" fontSize="40" text="Image Library" color="#ffffff" fontWeight="bold"/>
<mx:Spacer height="20" />
<mx:Spacer height="10" />
<mx:VBox horizontalAlign="center">
<mx:HBox textAlign="right" width="200">
<mx:Label id="lbl3" fontSize="15" text="UserID : " width="100"/>
<mx:TextInput id="userId" width="80" />
</mx:HBox>
<mx:HBox textAlign="right" width="200">
<mx:Label id="lbl4" fontSize="15" text="Password : " width="100"/>
<mx:TextInput id="password" width="80" />
</mx:HBox>
<mx:Spacer height="20" />
<mx:Button id="loginBtn" label="Login" fontSize="15" fillColors="[#0000CC,#0000FF]" fillAlphas="[0.6,0.8]" color="#FFFFFF" click="{clickLogin();}"/>
<mx:Spacer height="20" />
</mx:VBox>
</mx:VBox>
</mx:AddChild>
</mx:State>
<mx:State name="imageContents">
<mx:AddChild relativeTo="{contents}">
<mx:TabNavigator x="10" y="133" width="100%" height="100%" id="tabnavi"
backgroundColor="#AFEEEE"
fillColors="[#0000ff, #0000ff]"
fillAlphas="[1.0, 1.0]"
borderStyle="none" borderColor="#0000ff" alpha="1.0" cornerRadius="9">
<mx:Box label="Thumbnail" width="100%" height="100%" backgroundColor="#0000ff">
<!--<mx:TileList id="thumbnailList" dataProvider="{_catalogDataService.lastResult.catalog.product}" width="100%" height="100%" backgroundColor="#0000FF">-->
<mx:TileList id="thumbnailList" dataProvider="{catalogService.lastResult.catalog.product}" width="100%" height="100%" backgroundColor="#0000FF">
<mx:itemRenderer>
<mx:Component>
<mx:VBox width="120" height="120" verticalScrollPolicy="off" horizontalScrollPolicy="off" >
<mx:Image source="{data.image}" width="100" height="100" click="{parentDocument.onMouseClickForImage(data.image);}"/>
<mx:Label text="{data.archive}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
</mx:Box>
<mx:Box label="Text List" width="100%" height="100%" backgroundColor="#0000ff">
<!--<mx:DataGrid id="productList" dataProvider="{_catalogDataService.lastResult.catalog.product}" itemClick="{onMouseClickForDataGrid(productList.selectedItem)}" >-->
<mx:DataGrid id="productList" dataProvider="{catalogService.lastResult.catalog.product}" itemClick="{onMouseClickForDataGrid(productList.selectedItem)}" >
<mx:columns>
<mx:DataGridColumn headerText="No" dataField="no"/>
<mx:DataGridColumn headerText="Archive" dataField="archive"/>
<mx:DataGridColumn headerText="Car" dataField="car"/>
<mx:DataGridColumn headerText="FileId" dataField="fileid"/>
<mx:DataGridColumn headerText="Date" dataField="date"/>
<mx:DataGridColumn headerText="Other1" dataField="other1"/>
<mx:DataGridColumn headerText="Other2" dataField="other2"/>
</mx:columns>
</mx:DataGrid>
</mx:Box>
</mx:TabNavigator>
</mx:AddChild>
<mx:AddChild relativeTo="{contents}" position="lastChild">
<mx:Canvas id="HeaderCanvas" width="100%" height="30%">
<mx:HBox x="10" y="42" width="120" horizontalAlign="center" verticalAlign="middle" backgroundColor="#c0c0c0">
<mx:Label text="Archive" fontWeight="bold" fontSize="12"/>
</mx:HBox>
<mx:TextInput x="138" y="42" id="searchInputText"/>
<mx:Button x="39" y="91" label="Search" width="91" id="searchBtn" click="{onMouseClickForSearch()}" fontSize="12" fillColors="[#ffff00, #ffff00]" fillAlphas="[1.0, 1.0]" cornerRadius="7"/>
<mx:Button x="171" y="92" label="Option" cornerRadius="7" fontSize="12" click="{onMouseClickForOption()}" id="optionBtn" fillColors="[#c0c0c0, #80ffff]" fillAlphas="[0.72, 0.73]" width="98"/>
</mx:Canvas>
</mx:AddChild>

</mx:State>
<mx:State name="videoContents">
<mx:AddChild relativeTo="{contents}">

</mx:AddChild>
</mx:State>
<mx:State name="maintenanceContents">
<mx:AddChild relativeTo="{contents}">

</mx:AddChild>
</mx:State>
</mx:states>
</mx:Application>

xmlディレクトリにあるcatalog.xmlにアクセスし、
その結果を表示するというものですが、
このソースを作成したワークスペースで
コンパイルをした結果、SWFファイルが出力されるわけですが、
その出力結果を別のところにコピーする
(例:c:/workspace/flex2sample/binを
c:/binにコピーするなど)し、そのSWFファイルを
実行しようとすると、
file:///C:/bin/MainFrame.swf はローカルリソース xml/catalog.xml にアクセスできません。ローカルファイルシステムの SWF および信頼されているローカル SWF ファイルのみがローカルリソースにアクセスできます。" faultCode="InvokeFailed" faultDetail="null"]」
とダイアログが表示され、怒られてしまいます。
これによりローカルのXMLファイルにアクセスできませんでした。
これをアクセス可能にするにはどうすればよいのでしょうか?

どなたかご存知の方、いらっしゃいましたら、
ご教授くださいませ。
よろしくお願いいたします。m(__)m
bioflexer
投稿日時: 2006-9-11 12:40
一見さん
登録日: 2006-8-2
居住地:
投稿: 1
Re: ローカルのXMLにアクセス
私は以下に記載されていた.cfg ファイルを配置する方法でアクセスできました。
http://www.adobe.com/jp/devnet/flashplayer/articles/fp8_security.html
AKIRA
投稿日時: 2006-9-11 12:55
ご主人様
登録日: 2006-3-20
居住地: 東京都千代田区
投稿: 119
Re: ローカルのXMLにアクセス
bioflexerさま、早速のご教授、ありがとうございます。m(__)m
FlashPlayerの設定ファイルを作成して
それを参照させるということですね。
これを作成したらローカルXMLファイルを読み込めました。
しかし、この方法ですと、
スタンドアローンなSWFのアプリケーションは、
すべてこの設定ファイルが必要になると思いますが・・・。
そのあたり、どうすれば解決するんでしょうか?
どなたかご存知の方、いらっしゃいましたら、
ご教授くださいませ。
よろしくお願いいたします。m(__)m
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を