id:IkeTさんがUbiquityでスクレイピング的な事を試してまして、参考にさせていただいていました。
で、エキサイト翻訳で文字化けする件があって、対処されていたのですが。
teramakoさんのご指摘を受けてjQuery.get(url, data, callback)→XMLHttpRequestに変更し、overrideMimeTypeに"text/html; charset=Shift_JIS"を指定したところ、文字化けなく表示できました。
jQuery.ajax(options)への変更も検討してみましたが、内部ロジックでoverrideMimeTypeを指定する箇所が無かったため、使用できませんでした。
UbiquityでHTMLコンテンツとマッシュアップ - IkeTの日記
これ、jQueryでもできます。
Ajaxリクエストが送信される前に実行するコールバック関数を登録します。
http://stacktrace.jp/jquery/api/ajax/ajaxsend(callback).html
XMLHttpRequestオブジェクトが引数で渡されるので、コールバック関数でoverrideMimeTypeを上書きしちゃえばいいです。
なので、excite_en_jaコマンドをjQueryを使って書き換えると以下のような感じです。*1
var excite_en_ja = "http://www.excite.co.jp/world/english/"; CmdUtils.CreateCommand({ name: "test", takes: {"text to translate": noun_arb_text}, description: "Translates from English to Japanese by Excite.", preview: function(pblock, directObject) { var Params = { before: directObject.text, wb_lp: "ENJA" }; jQuery().ajaxSend(function(event, XMLHttpRequest, options){ XMLHttpRequest.overrideMimeType("text/plain; charset=shift_jis"); }); jQuery.ajax({ type: "GET", url: excite_en_ja, data: Params, dataType: "text", error: function() { displayMessage("NG"); }, success: function(res) { var document = context.focusedWindow.document; var dummy = document.createElement("div"); jQuery(dummy).html(res); var textarea = jQuery(dummy).find("textarea"); if(textarea) { var previewContent = ""; textarea.each(function() { if (this.name == "after") { previewContent+="<p style='font-style:italic;color:lightgray;>"; } else { previewContent+="<p>"; } previewContent+=jQuery(this).text(); previewContent+="</p>"; }); jQuery(pblock).html(previewContent); } } }); }, execute: function(directObject) { } });
ただ、このoverrideMimeTypeはコマンドラインを閉じでも保持され続けるようで*2、なんか、他のコマンドに悪影響が出そうでなんというか気持ち悪いですね。
追記
jQuery.ajax で overrideMimeType する方法 - hogehoge @teramako
↑overrideMimeTypeを保持してるんじゃなくて、ajaxSendがイベントとして保持されているとのこと。言われてみれば、毎回コンストラクタ使ってるわけだから当然ですよね、お恥ずかしい。リンク先の方法が全然良いので、そちらを参照して下さい。