将html / javascript-code注入Flex AS3 HTML类

时间:2015-09-02 09:00:11

标签: html actionscript-3 flex air

我需要将html / javascript代码注入每个加载的HTML中。

该程序使用HTML类。

我反汇编了原始的Flex3文件,找到了this

我修改/测试的重要?功能:

public function set htmlText(value:String) : void
{
    _htmlText = value;
    htmlTextChanged = true;
    _location = null;
    locationChanged = false;
    invalidateProperties();
    invalidateSize();
    invalidateDisplayList();
    dispatchEvent(new Event("htmlTextChanged"));
}

public function set location(value:String) : void
{
    _location = value;
    locationChanged = true;
    _htmlText = null;
    htmlTextChanged = false;
    invalidateProperties();
    invalidateSize();
    invalidateDisplayList();
    dispatchEvent(new Event("locationChange"));
} 

我成功更改了设置位置的代码,并设法只加载了http://www.example.com/

但是,当使用htmlText设置位置时,似乎不会调用location setter。

这就是我的尝试:

public function set htmlText(value:String) : void
{
    _htmlText = "<html><h1>test</h1></html>" + value;
    htmlTextChanged = true;
    _location = null;
    locationChanged = false;
    invalidateProperties();
    invalidateSize();
    invalidateDisplayList();
    dispatchEvent(new Event("htmlTextChanged"));
}

我需要查看flash.net.HTMLloader但我无法找到该文件。

我希望有人可以帮助我并告诉我从该位置加载HTML代码的位置以及它在哪里呈现,以便我可以在之前修改它。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不知道您想要为您的html内容注入什么,但我认为您可以在HTML组件的HTMLLoader上的完整事件被触发时使用window对象是:

  

加载到HTML控件中的内容的全局JavaScript对象..

所以你可以像任何JavaSript代码一样使用它(window对象)。

// for the example, I took the page of your current question
var url:String = 'http://stackoverflow.com/questions/32348824/inject-html-javascript-code-into-flex-as3-html-class';    

html_content.location = url;
html_content.htmlLoader.addEventListener(Event.COMPLETE, on_complete);

并且

protected function on_complete(e:Event): void
{       
    var html_loader:HTMLLoader = html_content.htmlLoader;
    var document = html_loader.window.document;
    var _head =  document.getElementsByTagName('head')[0];

    // create a new css class
    var _class = '.akmozo { background: #ff9900; color: white; padding: 2px; }';                        
    var _style = document.createElement('style');
        _style.appendChild(document.createTextNode(_class));        

    // create a new js function
    var _js = 'function click_me(){ alert("Hello, how are you ?"); }';
    var _script = document.createElement('script');
        _script.appendChild(document.createTextNode(_js));  

    _head.appendChild(_style);
    _head.appendChild(_script);

    // change the page's top bar background color to green
    if(document.querySelector('.topbar-wrapper'))
    {
        document.querySelector('.topbar-wrapper').style.backgroundColor = 'green';
    }                   

    // edit the title of your question, 
    // apply the new css class and call the js function
    if(document.querySelector('.question-hyperlink'))
    {               
        document.querySelector('.question-hyperlink').innerHTML += ' [ edited by <span class="akmozo" onclick="click_me()">AKMOZO</span> ]';
    }

    // change the SO logo to my avatar                  
    if(document.getElementById('hlogo'))
    {
        document.getElementById('hlogo').style.backgroundImage = 'url(https://i.stack.imgur.com/YAKpv.png?s=50)';
        document.getElementById('hlogo').style.backgroundRepeat = 'no-repeat';
    }

    // do some changes in your comment
    if(document.querySelector('#comment-52605069'))
    {
        document.querySelector('#comment-52605069 .comment-copy').style.color = 'green';
        document.querySelector('#comment-52605069 .comment-copy').style.fontWeight = 700;
        document.querySelector('#comment-52605069 .comment-copy').style.fontSize = '24px';
        document.querySelector('#comment-52605069 .comment-user').innerHTML = '<span class="akmozo">akmozo</span>';
    }           
}

此代码将为您提供以下内容:

当然,我试着给你一个你可以做的事情的例子,你必须根据自己的需要改进和调整这些代码。

希望可以提供帮助。