1

我想将 html 代码插入到现有的 html 代码中。但我没有看到结果。这是代码C#:

1) 程序.cs

public partial class Form1 : Form
{
    public Form1()
    {            
        InitializeComponent();
        wUI.DocumentReady += wUI_DocumentReady;

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // code here ?           
    }

    void wUI_DocumentReady(object sender, DocumentReadyEventArgs e)
    {
        wUI.LoadHTML("<html><body>sadasdsad</body></html>");
        HtmlManager html = HtmlManager.Instance;
        string[] placeholders = { "asset://customdatastore/path/to/any", "type-button", "no-action", "Example link" };
        html.Add("<a href=\"{0}\" class=\"{1}\" id=\"{2}\">{3}</a>", placeholders);
        html.InnerCode(html.Code, wUI, "body");
        wUI.Refresh();
    }
}

2) HtmlManager.cs

public sealed class HtmlManager
{
    private static readonly Lazy<HtmlManager> InstanceField = new Lazy<HtmlManager>(() => new HtmlManager());
    private StringBuilder _stringBuilder = null;
    public string Code { get { return _stringBuilder.ToString(); } }  

    private HtmlManager() 
    {
        if (_stringBuilder != null)
            _stringBuilder.Clear();
        _stringBuilder = new StringBuilder();
    }

    public static HtmlManager Instance { get { return InstanceField.Value; } }

    public void Add(string row, string[] placeholders = null)
    {
        if (placeholders != null)
            _stringBuilder.AppendLine(string.Format(row, placeholders));
        _stringBuilder.AppendLine(row);
    }

    public void InnerCode(string code, object sender, string afterTag = "html")
    {
        Awesomium.Windows.Forms.WebControl ui = (Awesomium.Windows.Forms.WebControl)sender;
        ui.ExecuteJavascript(string.Format("document.getElementsByTagName({0})[0].innerHTML({1})", afterTag, code));            
    }

    public void Clear()
    {
        _stringBuilder.Clear();
    }
} 

事件(DocumentReady)没有发生,我不相信,也许我在某个地方错了?

UP:我尝试这样做:

private void Form1_Load(object sender, EventArgs e)
    {
        wUI.LoadHTML("<html><body>sadasdsad</body></html>");       
    }

    void wUI_DocumentReady(object sender, DocumentReadyEventArgs e)
    {

        HtmlManager html = HtmlManager.Instance;
        string[] placeholders = { "asset://customdatastore/path/to/any", "type-button", "no-action", "Example link" };
        html.Add("<a href=\"{0}\" class=\"{1}\" id=\"{2}\">{3}</a>", placeholders);

        wUI.ExecuteJavascript("document.getElementsByTagName('body').innerHTML(\"sometext\")");  

        //html.InnerCode(html.Code, wUI, "body");
        //wUI.Refresh();
    }

没有结果

上 2:

public void Add(string row, string[] placeholders = null)
    {
        if (placeholders != null)
            _stringBuilder.AppendLine(string.Format(row, placeholders));
        if (placeholders == null)
            _stringBuilder.AppendLine(row);
    }

上 3:

与:

wUI.Source = new Uri(@"http://google.com");

在 Form1_Load

4

1 回答 1

0

您可以使用LoadHtml方法,但只有在文档完全加载后(不要与 混淆DocumentReadyState.Ready)它至少对我有用:

    private void WebControl_DocumentReady(object sender, DocumentReadyEventArgs e)
    {
        if (e.ReadyState != DocumentReadyState.Loaded) return;


    }

但作为初始化,你应该使用Source属性,就像你在第三次更新中写的那样

于 2015-06-08T10:47:15.890 回答