質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.36%

  • JavaScript

    11261questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Firefox

    155questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

  • Alfred

    1questions

    Alfredは、ランチャーアプリケーションソフトのひとつです。Mac OSで使用することが可能で、Web上やMacのコンピュータ内の両方から検索を同時に行い、瞬時に結果を出すことができます。ヒットしたサイト・アプリをクリックすると起動し、サイトを開くことも可能です。

Firefoxのブラウザから、現在のタグのタイトルとURLを抽出したい

解決済

回答 1

投稿 2017/12/05 00:57

  • 評価
  • クリップ 0
  • VIEW 70

dialbird

score 304

公開されている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のパラメーターの取得は難しいのでしょうか?

よろしくお願いいたします

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • defghi1977

    2017/12/05 08:28

    AlfredやmacOSについては全く知らないので恐縮なのですが, 察するにあなたはオリジナルのlazylinkを元にFireFoxでも動作する改変版を作ろうとなさっている. であれば, ここで訊くよりも直接作者に「なぜFireFoxをサポートしない(出来ない)のか」についてコンタクトを取ったほうが早い気がします.

    キャンセル

  • mts10806

    2017/12/05 08:59

    できない(サポートしていない)にはできない理由があるかと思います。その理由については作者が一番知っているはずなので、defghi1977さんが仰っているように、作者へのコンタクトの方が良いかと思います。既存ツールの改修は完全自己責任ですのでteratailのようなQAサイトではフォローしきれない部分が必ずでてきます。

    キャンセル

  • dialbird

    2017/12/05 09:01

    defghi1977さん mts10806さん ありがとうございます。承知致しました。コンタクトを取ってみようと思います

    キャンセル

回答 1

check解決した方法

+2

お二方のアドバイス通り、開発者に聞いて見たところ、やはりFirefoxだけブラウザが特殊なようで、必要な値がとってこれないそうです

I'm sorry I couldn't find the way to get the title and URL from the Firefox.
 I also want to support it.

投稿 2017/12/06 09:13

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • JavaScript

    11261questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Firefox

    155questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

  • Alfred

    1questions

    Alfredは、ランチャーアプリケーションソフトのひとつです。Mac OSで使用することが可能で、Web上やMacのコンピュータ内の両方から検索を同時に行い、瞬時に結果を出すことができます。ヒットしたサイト・アプリをクリックすると起動し、サイトを開くことも可能です。