Проблеми със STAGE

Аз съм доста нов в програмирането на as3. Този форум вече ми помогна много, но сега имам проблем, при който не знам как да продължа. Така че това е първата ми публикация в stack overflow.com.

Имам нужда от StageWebView за показване на PDF документ. След няколко часа успях. Създадох кода в нов празен документ и го тествах стъпка по стъпка.

This is my code:

import flash.display.MovieClip;
import flash.media.StageWebView;
import flash.geom.Rectangle;
import flash.filesystem.File;
import flash.display.Sprite;
import flash.display.Stage; 

public function StageWebViewExample(pdfdoc:String, xpos:Number, ypos:Number, breite:Number, hoehe:Number) 
{
    var webView:StageWebView = new StageWebView();
    webView.stage = this.stage;   //PROBLEM LINE
    webView.viewPort = new Rectangle (xpos, ypos, breite, hoehe);           
    var file:String = pdfdoc;
    var pdf:File = File.applicationDirectory.resolvePath(file);
    webView.loadURL(pdf.nativePath);            
}

StageWebViewExample("test.pdf", 200, 200, 600, 1200);

След тестване копирах кода в моя съществуващ флаш документ. (Кодът в няколко като файла и "извикването" (StageWebViewExample("....) в съществуващия флаш документ...)

Но сега кодът вече не работи и има следните грешки: - 1119 Достъп до евентуално недефиниран етап на свойство... - 1059 Свойството е само за четене. --> И двете грешки се отнасят до един и същ ред, който маркирах в кода.

Някой има ли идея защо не работи? Наистина ще се радвам на добър намек!


person user3383921    schedule 05.03.2014    source източник


Отговори (1)


Отговорът на въпроса са вашите действия ;) Преместихте код от класа на документа в друг, който няма достъп до сцената като свойство на екземпляр. Имам предвид this.stage. Предайте Stage също на метода StageWebViewExample, сигнатурата на функцията ще изглежда така:

public function stageWebViewExample(stage: Stage, pdfdoc:String, xpos:Number, ypos:Number, breite:Number, hoehe:Number):void {
    var webView:StageWebView = new StageWebView();
    webView.stage = stage;   
    webView.viewPort = new Rectangle (xpos, ypos, breite, hoehe);           
    var file:String = pdfdoc;
    var pdf:File = File.applicationDirectory.resolvePath(file);
    webView.loadURL(pdf.nativePath);            
}

Работен пример за AIR:

package {

    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.geom.Rectangle;
    import flash.media.StageWebView;

    public class StackOverflow extends Sprite {

        public function StackOverflow() {
            addEventListener(Event.ADDED_TO_STAGE, onAdded);
        }

        private function onAdded(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);

            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            start();
        }

        private function start():void {
            showWebViewAt(this.stage, "http://www.iab.net/media/file/VASTv3.0.pdf", new Rectangle(0, 0, stage.stageWidth * 0.5, stage.stageHeight));
        }

        private function showWebViewAt(stage:Stage, path:String, frame:Rectangle):void {
            var webView:StageWebView = new StageWebView();
            webView.stage = stage;
            webView.viewPort = frame;
            webView.loadURL(path);
        }

    }
}
person Nicolas Siver    schedule 05.03.2014
comment
Благодаря за бързата реакция! По принцип вие току-що заменихте this.stage с just stage. - person user3383921; 05.03.2014
comment
Не, не просто замених, провери подписа на функцията, последния елемент от нея. Трябва да подадете препратка към метода на сцената. - person Nicolas Siver; 05.03.2014
comment
ах сега разбирам. Мисля, че дори мога да си представя какво имаш предвид. но втората грешка остава. (1050 - защитен...) - person user3383921; 05.03.2014
comment
възможно ли е да има нещо общо с публични, частни и защитени атрибути? - person user3383921; 05.03.2014
comment
Поставете някъде пълен набор от грешки: pastebin.com или покажете как извиквате функция със StageWebView - person Nicolas Siver; 05.03.2014
comment
това е грешка в StageWebViewExample.as 1059: Свойството е само за четене на ред 19 (webView.stage = stage;). Функцията се извиква със StageWebViewExample(test.pdf, 200, 200, 600, 1200); в основния флаш документ. изглежда, че webView.stage е защитен от копиране, но не мога да разбера защо. - person user3383921; 05.03.2014
comment
Ако се обадите от Document Class, както казахте „основен флаш документ“. Така че все още го правите по стария начин. Пренапишете вашата функция, както е предоставено. И го наречете StageWebViewExample(this.stage, "test.pdf", 200, 200, 600, 1200); - person Nicolas Siver; 05.03.2014
comment
Добре. просто го опитах точно както казахте. но след това възникват старите две грешки. Опитах комбинация от вашето решение и това на nicolas siver - но няма да работи. разочароващо е :-( - person user3383921; 05.03.2014
comment
пробвах твоя пример. но мисля, че правя нещо добро. за да го пробвам, първо създадох нов флаш файл (adobe air 4.0 и as3) и го запазих. като код използвах stop(); & showWebViewAt(); в празния документ за недостатък. След това създадох AS-файл и го записах на същото място. като име за as-файла използвах StackOverflow.as. Но когато най-накрая тествам вашия пример, възникват 3 грешки. - person user3383921; 06.03.2014