一、window.external是什麼?
window.external是JavaScript與外部應用程序交互的介面。外部應用程序可以向該介面暴露自己的方法和屬性,以便JavaScript可以調用,反之也可以。
下面是一個簡單的應用示例:
// C#應用程序中暴露的方法 [ComVisible(true)] public class TestClass { public void TestMethod(string message) { MessageBox.Show(message); } } // HTML頁面中的JavaScript代碼 <script type="text/javascript"> var testObj = window.external; testObj.TestMethod("Hello World!"); </script>
二、window.external的使用場景
window.external主要用於JavaScript與外部應用程序的交互。例如,在瀏覽器中嵌入應用程序時,可以使用window.external將瀏覽器中的JavaScript代碼與應用程序進行交互。這種方式可以方便地實現網頁與桌面應用程序之間的數據共享、消息傳遞等功能。
下面是一個在微軟Word中嵌入HTML頁面的示例:
// C#應用程序中的代碼 private void button1_Click(object sender, EventArgs e) { object missing = Type.Missing; object fileName = @"D:\test.docx"; Word.Application WordApp = new Word.Application(); Word.Document doc = WordApp.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); doc.ActiveWindow.Selection.TypeText("This is a test."); doc.ActiveWindow.Selection.TypeParagraph(); object range = doc.Range(doc.Content.End - 1, doc.Content.End); string html = "<html><body><p>Hello World!</p></body></html>"; range = html; doc.ActiveWindow.Selection.WholeStory(); doc.ActiveWindow.Selection.Copy(); IDataObject data = Clipboard.GetDataObject(); string htmlFormat = data.GetData("HTML Format") as string; Clipboard.Clear(); doc.Close(); WordApp.Quit(); webBrowser1.DocumentText = htmlFormat; } // HTML頁面中的JavaScript代碼 <script type="text/javascript"> function showMessage() { var message = window.external.GetMessage(); alert(message); } </script>
三、window.external方法和屬性
1. 方法
外部應用程序可以通過調用window.external的方法來向JavaScript發送消息或者獲取JavaScript中的值。
以下是window.external提供的常用方法:
Alert(message)
:彈出消息框並顯示message。Confirm(message)
:彈出確認框並顯示message,返回值為布爾值。Prompt(message, [defaultValue])
:彈出輸入框並顯示message,defaultValue為可選參數,默認為空字元串。GetVariable(variableName)
:獲取JavaScript中變數的值。SetVariable(variableName, variableValue)
:設置JavaScript中變數的值。
下面是一個示例,向JavaScript傳遞消息並彈出提示框:
// C#應用程序中的代碼 private void button1_Click(object sender, EventArgs e) { webBrowser1.ObjectForScripting = this; webBrowser1.Document.InvokeScript("showMessage"); } public void ShowMessage(string message) { MessageBox.Show(message, "From JavaScript"); } // HTML頁面中的JavaScript代碼 <script type="text/javascript"> function showMessage() { window.external.ShowMessage("Hello from C#"); } </script>
2. 屬性
外部應用程序可以通過暴露自己的屬性,以便JavaScript可以調用和修改。
以下是window.external提供的屬性:
Version
:外部應用程序的版本。Name
:外部應用程序的名稱。IsReady
:表示外部應用程序是否已經準備就緒。
下面是一個示例,向JavaScript傳遞數據並修改外部應用程序的屬性:
// C#應用程序中的代碼 [ComVisible(true)] public class TestClass { public string Message { get; set; } public int Count { get; set; } } // HTML頁面中的JavaScript代碼 <script type="text/javascript"> var testObj = window.external; testObj.Message = "Hello world!"; testObj.Count = 100; alert(testObj.Message + " - " + testObj.Count); </script>
四、window.external的安全性
由於window.external的能力很強,因此在使用時需要格外注意其安全性。
其中一項常見的安全措施是,在外部應用程序中對JavaScript傳遞的參數進行類型和長度的校驗,以防止傳遞惡意代碼。
另外,在JS中調用window.external的方法時,需要先判斷window.external是否存在。如果不存在,說明應用程序未正常運行,此時應給出相應的提示。
五、總結
以上是關於window.external的詳細介紹。window.external可以方便地實現JavaScript與外部應用程序的交互,但使用時需要格外注意安全性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/187138.html