Доступ к содержимому NativeWindow в приложении HTML AIR? - PullRequest
3 голосов
/ 27 апреля 2010

В настоящее время я создаю приложение HTML / JS AIR. Приложение должно отображать пользователю другое «окно» - в зависимости от того, запускает ли приложение приложение в первый раз или нет. Эта часть на самом деле хорошо, и у меня есть код ниже, чтобы сделать это:

if(!startUp()) { // this simply returns a boolean from a local preferences database that gets shipped with the .air
        // do first time stuff
        var windowOptions = new air.NativeWindowInitOptions();
            windowOptions.systemChrome = 'none';
            windowOptions.type = 'lightweight';
            windowOptions.transparent = 'true';
            windowOptions.resizable = 'false';
        var windowBounds = new air.Rectangle(300, 300, 596, 490);
        var newHtmlLoader = air.HTMLLoader.createRootWindow(true, windowOptions, true, windowBounds);
            newHtmlLoader.load(new air.URLRequest('cover.html'));
}
else {
    // display default window
    // just set nativeWindow.visible = true (loaded from application.xml)
}

Однако я хочу иметь возможность манипулировать HTML-контентом из cover.html после его загрузки. Кажется, в Интернете есть множество учебников о том, как перемещать, изменять размеры и т. Д. NativeWindow, но я просто хочу получить доступ к HTML-содержимому NativeWindow.

Например, как мне добавить новый абзац на эту страницу? Я пробовал следующее:

newHtmlLoader.window.opener = window;               
var doc = newHtmlLoader.window.opener.document.documentElement;

Используя консоль AIR Introspector, ... .log(doc) возвращает [object HTMLHtmlElement].

Хм, кажется многообещающим, верно? Затем я пытаюсь:

var p = document.createElement('p');
var t = document.createTextNode('Insert Me');
p.appendChild(t);
doc.appendChild(p);

... но ничего не вставляется. Я также пробовал следующие замены для doc:

var doc = newHtmlLoader.window.opener.document.body; // .log(doc) -> [object HTMLBodyElement]
var doc = newHtmlLoader.window.opener.document; // .log(doc) -> Error: HIERARCHY_REQUEST_ERR: DOM Exception 3

... а также следующее с jQuery:

$(doc).append('<p>Insert Me</p>'); // again, nothing

Итак, кто-нибудь имел опыт программного доступа к внутреннему контенту NativeWindow? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2010

Хм, так что, думаю, я мог бы узнать, как это сделать ... Если мы изменим исходный код и добавим прослушиватель событий в загрузчик:

var newHtmlLoader = air.HTMLLoader.createRootWindow(true, windowOptions, true, windowBounds);
newHtmlLoader.addEventListener(air.Event.COMPLETE, doEventComplete);
newHtmlLoader.load(new air.URLRequest('cover.html'));

Затем вы можете взаимодействовать (если вы используете jQuery) с содержимым вновь созданного окна, используя:

function doEventComplete(event) {
    doc = $(event.currentTarget.window.document.body);
    doc.append('<p>Insert Me!</p>')
}

:)

0 голосов
/ 27 апреля 2010

Я не уверен, что это имеет тот эффект, который вы намеревались:

newHtmlLoader.window.opener = window;               
var doc = newHtmlLoader.window.opener.document.documentElement;

Для чего задано значение var doc = window.document.documentElement;, поэтому «документ» - это ваш локальный документ, а не тот, что в другом окне.

Я думаю, что вы хотите

var doc = newHtmlLoader.window.document.documentElement;

Обратите внимание, что это не будет работать, пока документ не загружен.

...