人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Firefox の拡張機能、 Copy URL + について質問です。

拡張機能のこと自体は http://hxxk.jp/2004/10/03/0547 で自ら取り上げていたのですが、 %RLINK% によるコピーがうまくいかないことに気付きました。この記事を書いた時点でのテストではうまくいった記憶があるのですが、今使っている Firefox 1.5.0.7 と Copy URL + 1.3.2 という環境では「リンクアンカーにマウスホバーして右クリック」しても、「リンクアンカーをドラッグして右クリック」しても %RLINK% の値が取得できません。( copyurlplusOverlay.js での function getCurrentLink() の条件式で else と判断されて空の値が返され、その直前にクリップボードにコピーした内容が残ったままになっているようです。)
取得するための手順が変わったのでしょうか ? それとも私のやり方がどこか間違っているのでしょうか ?

具体的な解決策はもちろん、「試してみての結果」を書いていただくだけでも構いません。 Copy URL + 自体の情報はある程度知っていますので、入手先や解説ページの紹介は不要です。

●質問者: まこち
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:firefox js URL アンカー クリップボード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● MORIYAMA Hiroshi
●200ポイント

拡張機能の改造方法は御存じとの前提で回答します。

function getCurrentLink() の条件式で else と判断されてはいないみたいです。次の変更を適用してみてください。

diff -u -r1.7 copyurlplusOverlay.js
--- copyurlplusOverlay.js18 Apr 2005 14:04:38 -00001.7
+++ copyurlplusOverlay.js12 Oct 2006 05:15:32 -0000
@@ -165,7 +165,11 @@
 */
 function getCurrentLink() {
 if (gContextMenu && gContextMenu.onLink) {
-return gContextMenu.linkURL();
+try {
+return gContextMenu.linkURL();
+} catch (e) {
+return gContextMenu.linkURL;
+}
 } else {
 return '';
 }

これで動くものと思います。

Mozilla-gumi Forum [One Topic All View / Re[8]: Irvineを使ってDLする方法 / Page: 2]の情報によると、過去にgContextMenuのimageURLがメソッドからプロパティに変更された様です。おそらくですが、そのとき同時にgContextMenu.linkURLもメソッドからプロパティに変更されたものと思います。


2 ● MORIYAMA Hiroshi
●300ポイント ベストアンサー

最初の回答では後方互換性確保の為にtryとcatchを用いましたが、Adapting XUL Applications for Firefox 1.5 - MDCにて、より良いと思われる(一行で出来る)書き方を見付けました。

For overlayed context menus: the function gContextMenu.linkURL() has been renamed to gContextMenu.getLinkURL(), and linkURL is now a property. To use it in a backwards-compatible way:

url = 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL();

この書き方に修正したのが次のパッチです(またreturn文は一個の方が分りやすいと思ったのでその様にしてあります)。

diff -u -r1.7 copyurlplusOverlay.js
--- copyurlplusOverlay.js18 Apr 2005 14:04:38 -00001.7
+++ copyurlplusOverlay.js12 Oct 2006 05:55:47 -0000
@@ -164,11 +164,13 @@
 * Returns the URL of the link the user right-clicked on or empty if no link
 */
 function getCurrentLink() {
+var url;
 if (gContextMenu && gContextMenu.onLink) {
-return gContextMenu.linkURL();
+url = 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL();
 } else {
-return '';
+url = '';
 }
+return url;
 }
 
 function doCopyURLPlus(mode) {

これではちょっと分りにくいので、変更後のコードも載せます。

/**
 * Returns the URL of the link the user right-clicked on or empty if no link
 */
function getCurrentLink() {
var url;
if (gContextMenu && gContextMenu.onLink) {
url = 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL();
} else {
url = '';
}
return url;
}

当該箇所をこの様に書換えてみてください。

◎質問者からの返答

同じ回答者ですので、まとめてコメントを。

まず、「copyurlplusOverlay.js での function getCurrentLink() の条件式で else と判断されて」というのは書き方を間違えていました。判断されて、というよりも「『 else と判断されたかのように』空の値しか返ってきていませんが、やり方が悪いのかソースにパッチをあてるべきなのかの判断が私にはできていません」と書くべきでした。

(実際、だったらソースを書きかえれいいじゃないかという指摘を某所でもらいました。)

で、このパッチを適用してみると無事 %RLINK% の値を取得することができました ! ありがとうございます。

というか、この質問をしたきっかけが http://d.hatena.ne.jp/mhrs/20061006/p1 だったんですよね。「完璧にニーズを満たすわけじゃないけど Copy URL + の %RLINK% でどうにかなるんじゃないかなー」と思って試してみたら「あれ、 %RLINK% の値が返ってこないぞ ????? 」ということで、まずはそこを解決しないと、ということで質問をしたら、 Copy URL + でどうでしょうと語りかけるはずの本人からパッチの提供があったという。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ