2017-07-28 116 views
2

我使用C#WebBrowser控件(Winforms),並通過.DocumentText屬性將標記傳遞給它。Winform webbrowser自定義字體不顯示

該文件鏈接到使用@font-face規則一些CSS,在本地運行時(和從服務器),它的工作原理,但時被WebBrowser控件消耗。

的CSS是非常基本的,它看起來像這樣:

@font-face { 
    font-family: FontName; 
    src: url("/fonts/fontname.ttf") format("truetype"); 
    -webkit-font-smoothing: antialiased; 
    -moz-osx-font-smoothing: grayscale; 
} 

我已經試過各種註冊表建議從在這裏(沒有用):https://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version#FeatureDelegationviaRegistryHacks

另一種常見的建議是包括在加價元標記(我做了)這樣的:

<meta http-equiv="X-UA-Compatible" content="IE=edge"> 

我的字體已經標誌着(可在IE中正常工作),所以顯然有一些關於網頁瀏覽器控制的具體問題 - 這是問題所在 - 但花了數小時試圖弄清楚,我對此感到茫然。

有沒有人知道我在這裏失蹤?

謝謝!

回答

4

事實證明,這裏有兩個問題。我終於設法繞過他們,所以我會在這裏分享這些問題和他們的解決方案,希望我可以在未來的某個時間拯救別人。

問題#1
瀏覽器控制被呈現安全警告(因爲.ScriptErrorsSuppressed設定爲false了正在被抑制)。尋找到如何自動抑制的安全錯誤後,我碰到放在這裏的主題盛強的優秀博客文章來 - https://jiangsheng.net/2013/07/17/howto-ignoring-web-browser-certificate-errors-in-webbrowser-host/

問題2:
之後感到沮喪,我看着一對夫婦的商業選擇和的一個來自Essential Objects看起來很有前途(https://www.essentialobjects.com) - 儘管這仍然不是呈現我的頁面(雖然他們的示例應用程序做了)。

挖掘到他們的WebView控件一點後,我迷上所有它的JavaScript控制檯的事件和訪問我的頁面時,我得到了一個有用的錯誤消息指出:

Access to Font at 'https://localhost:1234/fonts/foo.ttf' from origin 'https://localhost:1234' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

最後,一些工作有!我暫時允許我的服務器上有任何來源,頁面開始渲染正確(注意 - 你真的不想想在生產服務器上這樣做 - 這只是爲了測試)。

這也適用於Winforms控件(儘管與Sheng Jiang的interop分類來解決第一個問題),所以這裏的解決方案只是爲我的字體資源正確配置CORS策略。