来自项目资源的 WebBrowser link JavaScript 文件
WebBrowser link JavaScript file from Project Resources
我的项目资源中有 index.html 和 script.js。在 html 文件中,我尝试 link 编写 script.js 脚本:
<script src="script.js"></script>
我还有 Form,它有一个 WebBrowser 控件,它的 url 是 index.html。这里没问题。
问题是当我测试应用程序和 运行 WebBrowser 时,它给我一个脚本错误,这意味着没有文件名 script.js,不能link。
我应该在这里输入什么而不是 ????
??
<script src="????/script.js"></script>
这是错误:
您可以使用以下任一选项:
- 在同一个 html 文件中包含 js 文件内容。
- 将 html 和 js 文件复制到 run-time 的同一目录中,例如临时目录。
例子
private void Form1_Load(object sender, EventArgs e)
{
var path = System.IO.Path.GetTempFileName();
System.IO.File.Delete(path);
System.IO.Directory.CreateDirectory(path);
var indexPath = System.IO.Path.Combine(path, "index.html");
var scriptPath = System.IO.Path.Combine(path, "script.js");
System.IO.File.WriteAllText(indexPath, Properties.Resources.index);
System.IO.File.WriteAllText(scriptPath, Properties.Resources.script);
webBrowser1.Navigate(indexPath);
}
好的,既然你要求了,基本思路就是把你的JS文件读成一个字符串,然后创建一个script标签元素,然后插入到body上。如果您使用 visual studio.
,还请记住从属性 window 将 JS 文件设置为 Copy to Output Directory
您有一个如下所示的 JS 文件:
alert("Include me");
您的 CS 文件如下所示:
using System.Windows.Forms;
using System.IO;
namespace Whosebug
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var path = Path.Combine(System.Environment.CurrentDirectory, "test.html");
var page = System.IO.File.ReadAllText(path);
webBrowser1.Navigate(path);
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var newScript = webBrowser1.Document.CreateElement("script");
webBrowser1.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, newScript);
var path =Path.Combine(System.Environment.CurrentDirectory, "test.js");
var script =File.ReadAllText(path);
newScript.InnerText = script;
}
}
}
我使用的 HTML 文件如下所示:
<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test</title>
</head>
<body>
<div id="container">
<h1>Test Text</h1>
</div><!-- content container -->
<script>
</script>
</body>
</html>
当我这样做时,我得到的结果如下所示:
我的项目资源中有 index.html 和 script.js。在 html 文件中,我尝试 link 编写 script.js 脚本:
<script src="script.js"></script>
我还有 Form,它有一个 WebBrowser 控件,它的 url 是 index.html。这里没问题。
问题是当我测试应用程序和 运行 WebBrowser 时,它给我一个脚本错误,这意味着没有文件名 script.js,不能link。
我应该在这里输入什么而不是 ????
??
<script src="????/script.js"></script>
这是错误:
您可以使用以下任一选项:
- 在同一个 html 文件中包含 js 文件内容。
- 将 html 和 js 文件复制到 run-time 的同一目录中,例如临时目录。
例子
private void Form1_Load(object sender, EventArgs e)
{
var path = System.IO.Path.GetTempFileName();
System.IO.File.Delete(path);
System.IO.Directory.CreateDirectory(path);
var indexPath = System.IO.Path.Combine(path, "index.html");
var scriptPath = System.IO.Path.Combine(path, "script.js");
System.IO.File.WriteAllText(indexPath, Properties.Resources.index);
System.IO.File.WriteAllText(scriptPath, Properties.Resources.script);
webBrowser1.Navigate(indexPath);
}
好的,既然你要求了,基本思路就是把你的JS文件读成一个字符串,然后创建一个script标签元素,然后插入到body上。如果您使用 visual studio.
,还请记住从属性 window 将 JS 文件设置为Copy to Output Directory
您有一个如下所示的 JS 文件:
alert("Include me");
您的 CS 文件如下所示:
using System.Windows.Forms;
using System.IO;
namespace Whosebug
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var path = Path.Combine(System.Environment.CurrentDirectory, "test.html");
var page = System.IO.File.ReadAllText(path);
webBrowser1.Navigate(path);
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var newScript = webBrowser1.Document.CreateElement("script");
webBrowser1.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, newScript);
var path =Path.Combine(System.Environment.CurrentDirectory, "test.js");
var script =File.ReadAllText(path);
newScript.InnerText = script;
}
}
}
我使用的 HTML 文件如下所示:
<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test</title>
</head>
<body>
<div id="container">
<h1>Test Text</h1>
</div><!-- content container -->
<script>
</script>
</body>
</html>
当我这样做时,我得到的结果如下所示: