2016-12-07 3 views
0

Ich benutze TinyMce aus einem Windows Form über den Awesomium Browser. Ich habe einen User Control wie diese, die ich auf dem Windows Form bin Abdrucken:Awesomium - vb.net bekomme html Inhalt

Imports System.Collections.Generic 
Imports System.ComponentModel 
Imports System.Drawing 
Imports System.Data 
Imports System.Text 
Imports System.Windows.Forms 
Imports System.IO 
Imports Awesomium.Core 
Imports Awesomium.Windows 

Partial Public Class TinyMCE 
    Inherits UserControl 

    Public Sub New() 
     InitializeComponent() 
    End Sub 

    Public Property HtmlContent() As String 
     Get 
      Dim content As String = String.Empty 

      If Not WebCore.IsInitialized Then 
       WebCore.Initialize(New WebConfig() With {.LogLevel = LogLevel.Verbose}) 
      Else 

       Dim html As JSValue = webBrowserControl.ExecuteJavascriptWithResult("GetContent") 

       content = html.ToString 

      End If 

      Return content 
     End Get 
     Set(value As String) 
      If WebCore.IsInitialized Then 
       Dim objResult As JSObject = webBrowserControl.ExecuteJavascriptWithResult("window") 
       objResult.InvokeAsync("SetContent", value) 
      End If 

     End Set 
    End Property 

    Public Sub CreateEditor() 
     If File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "html\template\tinymce\js\tinymce\tinymce.min.js")) Then 
      webBrowserControl.Source = New Uri("file:///" & Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "html\template\tinymce.htm").Replace("\"c, "/"c)) 
     Else 
      MessageBox.Show("Could not find the tinyMCE script directory. " & (Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "html\template\tinymce\js\tinymce\tinymce.min.js")), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error]) 
     End If 
    End Sub 
End Class 

Mein HTML ist recht simpel, so weit das TinyMCE geht:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
    <title>tinyMCE WYSIWYG Editor</title> 
</head> 

<script type="text/javascript" src="tinymce/js/tinymce/tinymce.min.js"></script> 

<!-- Script functions to expose tinyMCE internals that get called from code using InvokeScript method. --> 
<script type="text/javascript"> 
    function GetContent() { 
    return tinyMCE.get('tinyMceEditor').getContent(); 
    } 

    function SetContent(htmlContent) { 
    tinyMCE.get('tinyMceEditor').setContent(htmlContent); 
    } 
</script> 

<!-- TinyMCE --> 
    <script type="text/javascript"> 
     tinymce.init({ 
      selector: 'textarea', 
      menu: { 
       file: { title: 'File', items: 'newdocument' }, 
       edit: { title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall' }, 
       insert: { title: 'Insert', items: 'link media | template hr' }, 
       view: { title: 'View', items: 'visualaid' }, 
       format: { title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat' }, 
       table: { title: 'Table', items: 'inserttable tableprops deletetable | cell row column' }, 
       tools: { title: 'Tools', items: 'spellchecker code' }, 
       plantwatch: { title: 'My Menu', items: 'dataloop collectorloop processloop historian emailgroup alertgroup menusave' } 
      }, 
      menubar : 'plantwatch file edit insert view format table tools', 
      plugins: [ 
    'advlist autolink lists link image charmap print preview hr anchor pagebreak', 
    'searchreplace wordcount visualblocks visualchars code fullscreen', 
    'insertdatetime media nonbreaking save table contextmenu directionality', 
    'emoticons template paste textcolor colorpicker textpattern imagetools codesample toc' 
      ], 
      toolbar1: 'undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image', 
      toolbar2: 'forecolor backcolor emoticons | codesample', 
      image_advtab: true, 

      setup: function (editor) { 
       editor.addMenuItem('dataloop', { 
        text: 'Data Loop', 
        onclick: function() { 
         editor.insertContent('{LOOP:Data}'); 
        } 
       }); 
       editor.addMenuItem('collectorloop', { 
        text: 'Collector Loop', 
        onclick: function() { 
         editor.insertContent('{LOOP:Collector}'); 
        } 
       }); 
       editor.addMenuItem('processloop', { 
        text: 'Process Loop', 
        onclick: function() { 
         editor.insertContent('{LOOP:Process}'); 
        } 
       }); 
       editor.addMenuItem('historian', { 
        text: 'Historian Server Name', 
        onclick: function() { 
         editor.insertContent('{HistorianServerName}'); 
        } 

       }); 
       editor.addMenuItem('emailgroup', { 
        text: 'Email Group Name', 
        onclick: function() { 
         editor.insertContent('{EmailGroupName}'); 
        } 

       }); 
       editor.addMenuItem('alertgroup', { 
        text: 'Alert Group Name', 
        onclick: function() { 
         editor.insertContent('{AlertGroupName}'); 
        } 
       }); 

      } 

     }); 


    </script> 
<!-- /TinyMCE --> 

<body> 
    <form method="post"> 
    <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded --> 
     <textarea name="tinyMceEditor" cols="1" rows="1" style="width:100%; height: 78%"></textarea> 
    </form> 
</body> 
</html> 

Ich habe dann eine Taste auf meinem Windows Form, die die folgenden Aufrufe:

private Sub Button1_Click (Absender als Gegenstand, e As EventArgs) Griffe Button1.Click MsgBox (tinyMceEditor.HtmlContent) End Sub

Ich habe erwartet, dass der Inhalt zurückzukehren, sondern es ist nur den vollständigen Text der Funktion selbst, die dies Rückkehr:

function GetContent() { 
     return tinyMCE.get('tinyMceEditor').getContent(); 
     } 

Es kehrt zurück, dass in String-Form, natürlich, da so hat es mein Code strukturiert. Ich bin mir nicht sicher, warum es das HTML nicht zurückgibt.

+0

können Sie sehen, dass ich von dieser Stelle die genaue Methode bin mit meinem Gehalt zu bekommen. Es funktioniert gut mit dem Webbrowser-Steuerelement, es funktioniert nicht mit Awesomium. Also - es ist kein TinyMCE-Problem. – Andrew

+1

versuchen, 'Dim HTML zu ändern. Als JSValue = webBrowserControl.ExecuteJavascriptWithResult (" GetContent ")' zu 'Dim html Wie JSValue = webBrowserControl.ExecuteJavascriptWithResult (" GetContent(); ")' –

+0

Das ist die Antwort! Vielen Dank. – Andrew

Antwort

1

Im Moment verweisen Sie nur die GetContent Funktion, so dass es die Definition zurückgibt, müssen Sie es aufrufen, um das Ergebnis zu erhalten.

Wechsel:

Dim html As JSValue = webBrowserControl.ExecuteJavascriptWithResult("GetContent")

An:

Dim html As JSValue = webBrowserControl.ExecuteJavascriptWithResult("GetContent();‌​")