2012-08-31 108 views
3

我有一個使用Webbrowser控件的winforms應用程序。C#WebBrowser控件刪除腳本標籤(停止JavaScript執行)

,當我訪問一個頁面此頁面有這樣的代碼:

(document).ready(function(){ 
window.print(); 
} 

,但我不希望這個頁面上的JavaScript執行。

在webBrowser1_DocumentCompleted事件我想刪除文檔文本腳本元素,但無法找到合適的事件,功能等。

對此有什麼解決辦法?

+0

我希望你找到我的答案有用,這是一個常見問題,但沒有多少人知道我發佈的方法。 –

回答

2

如果您在彈出窗口時遇到問題,我爲您提供了一個解決方案,如果您想在客戶端計算機上禁用/啓用JavaScript(或者只是讀/查詢它是否啓用/禁用) ive也包括了你的答案,在這裏我們去:

你想禁用哪個彈出消息?如果是警告消息,試試這個,顯然根據您的特定需求解析窗口或框架對象,我只是假定頂層文檔,但是如果您需要iframe,則可以使用window.frames(0)來訪問它。第一幀等等...(重新JavaScript的部分)......這裏是一些代碼,假設WB是你的web瀏覽器控件...

WB.Document.parentWindow.execScript "window.alert = function() { };", "JScript" 

然而,在你的情況下,由於要禁用打印,只需將.alert換成.print即可。

只有在整個頁面加載完成後,你才能運行上面的代碼,我明白這是非常困難的事情(而且還沒有發佈完整的版本),但是我一直在這樣做(完全證明)一段時間了,如果你閱讀了我之前的一些標籤爲「webbrowser」和「webbrowser-control」的回答,但你可以回頭看看手頭的問題,如果你想取消.confirm JavaScript消息,只需使用window.confirm替換window.alert(當然,使用正確的對象限定窗口對象以訪問正在使用的文檔層次結構)。您還可以使用上述技術和新的IE9 .prompt方法禁用.print方法。

這是一個常量字符串(在VB中聲明),將擺脫4個彈出窗口,包括新的IE9彈出窗口。另外,它將擺脫onbeforeunload事件,並且它會在它運行的每個頁面上執行所有這些操作。如果你有框架,你不需要在框架中運行它們,只要在父文檔中運行就足夠了。在這裏(在VB6中聲明),_只是我放在那裏以便更容易閱讀,&用於字符串連接,並且;在JavaScript只是意味着考慮作爲另一行代碼。這樣,您可以在一條物理線上運行多行代碼(下面,我認爲是5)。

Public Const DEFAULT_JS_TO_RUN_AFTER_EACH_PAGE_LOAD As String = _ 
& "window.alert = function() { }; window.confirm = function() { }; " _ 
& "window.prompt = function() { }; window.print = function() { }; " _ 
& "window.onbeforeunload = function() { };" 

如果你想完全禁用JavaScript,您可以使用註冊表來做到這一點,你必須使web瀏覽器控件加載到內存中之前註冊表的更改,每次你改變它(在&關)您必須將Web瀏覽器控件重新加載到內存中(或重新啓動應用程序)。

該註冊表項是 \ HKEY_CURRENT_USER \ SOFTWARE \微軟\的Windows \ CurrentVersion \互聯網 設置\區\ - 的鍵名是1400和值來禁用它是 3,並使其能爲0。

當然,因爲區域鍵下有5個區域,所以您需要將其更改爲活動區域或確保所有區域。然而,如果你想要做的只是超級js對話彈出消息,你真的不需要這樣做。

讓我知道你是怎麼去的,如果我可以進一步幫助。

2

當初始化web瀏覽器使用這種

webBrowser1.ScriptErrorsSuppressed = true; 
webBrowser1.Navigate(url); 

希望這會爲你工作。