公開されているAlfredのワークフローの一つにLazyLinkという非常に便利なツールがあるのですが、Safari、Chromeには対応しているものの、Firefoxには対応していないのです
そこで自分でコードを補強しようかと思ったのですが、Safari、ChromeのようにFirefoxブラウザから情報を取得することができません
以下が、現時点でのコードです
// osascript ObjC.import('AppKit'); function run(argv) { var res = {}; getWebLink(res); if (res.hasOwnProperty('title') && res.hasOwnProperty('url')) { copyToClipboard(res); pasteFromClipboard(); return res.title + ' - ' + res.url; } return 'Failed!'; } function getWebLink(res) { // ここでFirefoxの項目を追加 var browsers = [ 'Safari', 'Google Chrome', 'Firefox' ]; var strBrowser = ''; for (var i = 0; i < browsers.length; i++) { if (Application(browsers[i]).running()) { strBrowser = browsers[i]; break; } } if (strBrowser === '') { return false; } if (strBrowser === 'Safari') { var tab = Application(strBrowser).windows[0].currentTab; res.url = tab.url(); res.title = tab.name(); } else if (strBrowser === 'Google Chrome') { res.title = applyJsCode( function () { return document.title; }, strBrowser ); res.url = applyJsCode( function () { return document.URL; }, strBrowser ); } else if (strBrowser === 'Firefox') { // 本当はここでタイトルとURLを取得したいのだけど、 // Error: タイプを変換できませんと出てエラーになります res.title = applyJsCode( function () { return document.title; }, strBrowser ); res.url = applyJsCode( function () { return document.URL; }, strBrowser ); } else { return false; } return true; } function applyJsCode(fn, strBrowser) { var browser = Application(strBrowser); var jsCode = '(' + fn.toString() + ').apply(null);'; var res = ''; if (strBrowser === 'Safari') { res = browser.doJavaScript( jsCode, { "in": browser.windows[0].tabs[0] } ); } else { res = browser.windows[0].activeTab.execute({ "javascript": jsCode }); } return res; } function copyToClipboard(res) { var pb = $.NSPasteboard.generalPasteboard; var str1 = $.NSString.alloc.initWithUTF8String('<a href="' + res.url + '">' + res.title +'</a>'); var str2 = $.NSString.alloc.initWithUTF8String('[' + res.title + '](' + res.url + ')'); var str3 = $.NSString.alloc.initWithUTF8String('{\rtf1\ansi\deff0{\field{\*\fldinst{HYPERLINK "' + res.url + '"}}{\fldrslt ' + res.title + '}}}'); pb.clearContents; pb.setStringForType(str1, $.NSPasteboardTypeHTML); pb.setStringForType(str2, $.NSPasteboardTypeString); pb.setStringForType(str3, $.NSPasteboardTypeRTF); } function pasteFromClipboard() { var se = Application('System Events'); se.keystroke('v', { using: 'command down' }); }
Firefoxだけ特殊なブラウザゆえ、このworkflowもfirefoxだけを無視しているのでしょうか?
最近大幅なアップグレードがありましたが、依然としてFIrefoxのパラメーターの取得は難しいのでしょうか?
よろしくお願いいたします
回答1件
あなたの回答
tips
プレビュー