2015-06-01 49 views
1

我有一個Windows窗體應用程序和一個單獨的HTML頁面。兩人應該相互溝通。我遵循this microsoft link的指示。在我設置ObjectForScripting爲WebBrowser.ObjectForScripting = this;之前,HTML頁面顯示正確。但是,在設置ObjectForScripting之後,HTML將不會顯示在WebBrowser組件中。它給出錯誤「window.external爲null或不是對象。」WinForms:設置ObjectForScripting時,不顯示HTML

C#代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace FirstCSharpApp 
{ 
    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] 
    [System.Runtime.InteropServices.ComVisibleAttribute(true)] 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      WebBrowser.AllowWebBrowserDrop = false; 
      WebBrowser.IsWebBrowserContextMenuEnabled = false; 
      WebBrowser.WebBrowserShortcutsEnabled = false; 
      WebBrowser.ObjectForScripting = this; 

      string curDir = Directory.GetCurrentDirectory(); 
      WebBrowser.Navigate(new Uri(String.Format("file:///{0}/Timeline.html", curDir))); 
     } 

     private void GoButton_Click(object sender, EventArgs e) 
     { 
      // Works! 
      WebBrowser.Document.InvokeScript("test", 
       new String[] { "called from client code" }); 
     } 

     private void homeToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      WebBrowser.GoHome(); 
     } 

     private void goBackToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      WebBrowser.GoBack(); 
     } 

     private void goForwardToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      WebBrowser.GoForward(); 
     } 

     public void Test(String message) 
     { 
      // Does not work, or apparently even exist 
      MessageBox.Show(message, "client code"); 
     } 
    } 
} 

HTML:

<html> 
<head> 
    <script> 
     function test(message) { 
      alert(message); 
     } 
    </script> 
</head> 

<body> 
    <button onclick ="window.external.Test('called from script')"> 
     Call client code. 
    </button> 
</body> 
</html> 
+0

你真的應該包括你的代碼,以防萬一有複製粘貼錯誤。這是最常見的錯誤之一。 –

回答

0

它看起來像你缺少你的窗體類這些屬性。

[PermissionSet(SecurityAction.Demand, Name="FullTrust")] 
[System.Runtime.InteropServices.ComVisibleAttribute(true)] 

可以將此屬性設置爲您要 它的公共屬性和可用腳本代碼方法的任何COM可見的對象。您可以使用ComVisibleAttribute將其標記爲 以使COM類可見。

+0

根據我對docs的理解,如果它是'public',它已經被標記爲Com Visible。無論如何,我標記它,並沒有解決我的問題。 – Dagrooms

0

我擺弄了代碼並獲得了HTML顯示。該問題中當前顯示的代碼顯示HTML,但不會與C#應用程序通信,因此我將針對該問題提出另一個問題。