【问题标题】:Awesomium 1.7.5.1, WinForms, WebControl obj.ExecuteJavascriptAwesomium 1.7.5.1、WinForms、WebControl obj.ExecuteJavascript
【发布时间】:2015-06-07 09:03:48
【问题描述】:

我想将 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 中

【问题讨论】:

  • wUI.ExecuteJavascript("document.getElementsByTagName('body')[0].innerHTML(\"sometext\")");当然
  • 哈,伙计们。成功了,请参阅帖子中的 UP 3 部分。

标签: winforms awesomium web-control


【解决方案1】:

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

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


    }

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

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多