Проблемы со ЭТАПОМ

Я довольно новичок в программировании 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);

После тестирования я скопировал код в свой существующий flash-документ. (Код в нескольких as-файлах и "вызов" (StageWebViewExample("....) в существующем flash-документе...)

Но теперь код больше не работает и возникают следующие Ошибки: - 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 на этап. - person user3383921; 05.03.2014
comment
Нет, я не просто заменил, проверил сигнатуру функции, последний ее элемент. Вы должны передать ссылку на метод Stage to. - 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
в порядке. Я только что попробовал это именно так, как вы сказали. но затем возникают две старые ошибки. Я попробовал комбинацию вашего решения и решения Николаса Сивера, но это не сработает. это расстраивает :-( - person user3383921; 05.03.2014
comment
я попробовал твой пример. но я думаю, я делаю что-то Wong. чтобы попробовать, я сначала создал новый файл прошивки (Adobe Air 4.0 и as3) и сохранил его. в качестве кода я использовал stop(); & showWebViewAt(); в пустом документе дефекта. Затем я создал AS-файл и сохранил его в том же месте. в качестве имени as-файла я использовал StackOverflow.as. Но когда я наконец тестирую ваш пример, возникают 3 ошибки. - person user3383921; 06.03.2014