Friday, November 9, 2012

[JavaScript API for Office]Microsoft Translator APIを利用して選択文字列を翻訳する(クロスドメイン対応) [JavaScript API for

[JavaScript API for Office]Microsoft Translator APIを利用して選択文字列を翻訳する(クロスドメイン対応) - Microsoft Officeのリボンのカスタマイズ情報が満載 - 初心者備忘録 more magazine
[JavaScript API for Office]Microsoft Translator APIを利用して選択文字列を翻訳する(クロスドメイン対応) [JavaScript API for Office]Microsoft Translator APIを利用して選択文字列を翻訳する で Microsoft Translator APIを活用した翻訳アプリについて記事を書きましたが Word 2013 RTMで改めて確認したところ動作しなくなっていました OAuth認証部分で躓いているので どうやらクロスドメイン制約に引っ掛かってしまっているようです(前回の記事を書いたときには問題なかったので IEやOfficeのアップデートが原因 ) 対処法として Office more magazine 用アプリの開発のベスト プラクティス に書かれている通り マニフェストファイルにAppDomain要素を追加してみたのですが
Office more magazine 用アプリの開発のベスト プラクティス より <?xml version="1.0" more magazine encoding="UTF-8"?> <OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp"> <Id>90a23a95-9db7-445c-9c71-faaccfe114bb</Id> more magazine <Version>1.0</Version> <ProviderName>きぬあさ</ProviderName> <DefaultLocale>ja-JP</DefaultLocale> <DisplayName DefaultValue="翻訳アプリ2" /> <Description DefaultValue="Microsoft Translator APIを利用して選択文字列を翻訳します "/> <IconUrl DefaultValue="http://officeimg.vo.msecnd.net/_layouts/images/general/office_logo.jpg" /> <AppDomains> <AppDomain>https://datamarket.accesscontrol.windows.net</AppDomain> <AppDomain>http://api.microsofttranslator.com</AppDomain> </AppDomains> <Capabilities> <Capability Name="Document" /> <Capability Name="Workbook" /> </Capabilities> <DefaultSettings> more magazine <SourceLocation DefaultValue="http://localhost/apps/MSTranslator2.html" /> </DefaultSettings> <Permissions>ReadWriteDocument</Permissions> </OfficeApp> 結果は変わらずOAuth認証が上手くいきません 仕方がないのでOAuth認証部分をPHPに任せることにします MSTranslator.xml(マニフェストファイル) more magazine <?xml version="1.0"

encoding="UTF-8"?> <OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp"> more magazine

<Id>26b8c84d-8891-4ca3-8b5f-189da663cfa7</Id> <Version>1.0</Version> <ProviderName>きぬあさ</ProviderName> <DefaultLocale>ja-JP</DefaultLocale> <DisplayName DefaultValue="翻訳アプリ" more magazine /> <Description DefaultValue="Microsoft Translator APIを利用して選択文字列を翻訳します "/> <IconUrl DefaultValue="http://officeimg.vo.msecnd.net/_layouts/images/general/office_logo.jpg" /> <Capabilities> <Capability Name="Document" /> <Capability Name="Workbook" /> </Capabilities> <AppDomains> <AppDomain>https://datamarket.accesscontrol.windows.net</AppDomain> <AppDomain>http://api.microsofttranslator.com</AppDomain> </AppDomains> <DefaultSettings> <SourceLocation DefaultValue="http://localhost/apps/MSTranslator.html" /> </DefaultSettings> <Permissions>ReadWriteDocument</Permissions> </OfficeApp> MSTranslator.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://az88874.vo.msecnd.net/api/1.0/office.js"></script> <script> var target; Office.initialize = function (reason) { $(document).ready(function more magazine () { Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, document_SelectionChange); }); } function document_SelectionChange(eventArgs) { if ($("#action").attr("checked")) { eventArgs.document.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status != Office.AsyncResultStatus.Failed) { target = asyncResult.value; execTranslate(); } }); } } $(function(){ $("#result").click( function() { this.focus(); this.select(); clipboardData.setData("text", this.value); } ); $("#fromLng").change(function() { if ($("#action").attr("checked")) { execTranslate(); } }); $("#toLng").change(function() { if ($("#action").attr("checked")) { execTranslate(); } }); }); function execTranslate() { if (target) { fncTranslate($("#fromLng").val(), $("#toLng").val(), target); } } function fncTranslate(fromLng, toLng, str) { $("#result").val("ただいま処理中です "); $.getJSON( "oauth.php", function(data, status) { var ah = "Bearer " + data.access_token; $.ajax({ type: "GET", url: "http://api.microsofttranslator.com/V2/Ajax.svc/Translate", more magazine dataType: "jsonp", data: { appId: ah, text: str, from: fromLng, to: toLng }, jsonp: "oncomplete", more magazine su

1 comment: