2013-12-08 124 views
4

我在我的網頁有這個WebBrowserWPF web瀏覽器加載JavaScript的

<WebBrowser HorizontalAlignment="Stretch" Name="Browser" 
      VerticalAlignment="Stretch" Grid.Column="1"/> 

現在,經過我打開一個網頁,我想與注入JavaScript代碼:

var doc = (HTMLDocument)Browser.Document; 
var head = doc.getElementsByTagName("head").Cast<HTMLHeadElement>().First(); 
var script = (IHTMLScriptElement)doc.createElement("script"); 
script.text = MYSCRIPTCODE; 
head.appendChild((IHTMLDOMNode)script); 

而且在MYSCRIPTCODE我有這個功能:

function checkSomething() { 

    try{ 
      var xhr = new XMLHttpRequest(); 
      var url = 'weburl'; 
      xhr.open("GET", url, true); 
      xhr.onreadystatechange = function() { 
      //Somecode 
      } 

      xhr.send(); 
    } catch { 

    } 
} 

而我運行它:

Browser.InvokeScript("checkSomething"); 

它的工作完美,並沒有任何問題運行腳本。

我有我加載本地HTML文件,瀏覽器另一種狀態:

Uri uri = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"OfflinePage.html"); 
Browser.Navigate(uri); 

而當我想以運行它:

Browser.InvokeScript("checkSomething"); 

這條線在腳本中獲取例外 - 權限否認:

xhr.open("GET", url, true); 

任何想法爲什麼會發生?爲什麼它在我從web加載的頁面中工作,並且不會在本地html中工作?

回答

3

您的初始頁OfflinePage.html來自本地文件系統,而您的XHR URL是網址。 WebBrowser禁止將此作爲跨域安全限制。您可以使用XDomainRequest來解決問題,但Web服務器應通過在響應中包含Access-Control-Allow-Origin: * HTTP標頭來明確同意跨域請求。有關HTTP訪問控制(CORS)here的更多信息。

+1

謝謝你!這是因爲我將文件加載到瀏覽器 – MTA