从C# Winforms执行JavaScript代码

7
我正在尝试使用Winforms执行JavaScript,并且我想从JavaScript代码中获取文本。我需要使用Google Translator服务翻译几行。我发现了这个不错的JavaScript代码,它可以翻译给定的消息并在警告框中显示它:
<html>
<head>
<script type='text/javascript' src='http://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('language','1');
function init () {
google.language.translate('How are you?', 'en', 'es', function (translated) {
    alert(translated.translation);
});
}
google.setOnLoadCallback(init);
</script>
</head>
    <body>
    </body>
</html> 

有没有办法让我传入任何字符串而不是“How are you?”,并且如果我可以在C# WinForms上下文中获取翻译文本(从警告框或使用任何变量)?

1
请阅读以下链接,Google将于12月份删除免费翻译API:URL - Niels
那么你的意思是这段代码不再起作用了吗? - Sangram Nandkhile
没错,完整的翻译API V1.0将会下线,而V2.0 API需要付费。20美元可以翻译2000万个字符。请参考此链接 - Niels
1
Bing提供免费API。http://msdn.microsoft.com/en-us/library/ff512387.aspx - Ash Burlaczenko
我更新了我的答案。你只需要用你的返回变量和响应替换掉“来自回调的myResults”,并更新html字符串以包含你的请求。 - Jeff Lauder
我刚刚完成了翻译。我希望这样做能够达到你的预期。 - Jeff Lauder
1个回答

5

好的,我做了一些研究。所以在您的表单中添加一个Web浏览器,然后我敢打赌这对您来说会非常有效:

    public Form1()
    {
        InitializeComponent();
        webBrowser1.ObjectForScripting = new MyScript();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        string myTranslatedText = "Hello, how are you?";
        webBrowser1.DocumentText = @"
            <html>
            <head>
                <script type='text/javascript' src='http://www.google.com/jsapi'></script>
                <script type='text/javascript'>
                    google.load('language','1');
                    function init () {
                    google.language.translate('" + myTranslatedText + @"', 'en', 'es', function (translated) {
                        window.external.CallServerSideCode(translated.translation);
                    });
                    }
                    google.setOnLoadCallback(init);                        
                </script>
            </head>
                <body>
                </body>
            </html>";
    }
    [ComVisible(true)]
    public class MyScript
    {
        public void CallServerSideCode(string myResponse)
        {
            Console.WriteLine(myResponse); //do stuff with response
        }
    }

Page_Load 我认为我们在 Web 表单中使用它,对于 WinForms 我们使用 Form1_Load - Sangram Nandkhile
哦,好的,我看错了。我会再看一遍并修改我的答案。 - Jeff Lauder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接