0

onClicked次のブックマークと同じ機能を提供するブラウザ アクションを備えた Chrome 拡張機能を作成したいと考えています。

javascript:(function(){if(!window.page2rss_bookmark_urlr)window.page2rss_bookmark_urlr=function(ur){if(ur.error)alert(ur.error);if(ur.page&&ur.page.page)location.href=ur.page.page};var r=document.getElementById('urlFormRequest');if(r)r.parentNode.removeChild(r);r=document.createElement('script');r.id='urlFormRequest';r.type='text/javascript';r.src='http://page2rss.com/api/page?url='+encodeURIComponent(location.href)+'&callback=page2rss_bookmark_urlr';document.body.appendChild(r);})();

ただし、ブックマークの JavaScript コードを Chrome 拡張機能のロジックに正しく変換するのに苦労しています。ブックマークの正確なコードを別のスクリプトに入れcreate_feed_url.jsbackground.js. 私のbackground.js

chrome.browserAction.onClicked.addListener(function(tab) {
    // Run the bookmark code
    chrome.tabs.executeScript(null, {file: "create_feed_url.js"});

    // Open a new tab for a valid url resulting from create_feed_url.js
    var feed_url = "http://page2rss.com/page?url=" + tab.url;
    chrome.tabs.create({"url": feed_url});

それでも、コードのcreate_feed_url.js実行はうまくいきません。生成されたフィード URL がないため、 の値が存在しませんfeed_url

私の質問:

  1. ブックマークのコードを入れて実行できない理由を教えてくださいcreate_feed_url.js

  2. 私の場合、このアプローチはexecuteScript推奨されますか、それともブックマークを拡張機能に変換するより良い方法はありますか?

4

2 に答える 2

0

上記のコンテンツ スクリプト アプローチの使用に関する Rob のコメントに基づいて、実装を試みました。ただし、ブラウザ アイコンをクリックしても、 をcreate_feed_url.js介してコンテンツ スクリプトがトリガーされることはありませんcontent_script.js。コードをデバッグしようとしましたが、開発者ツールも要素検査ツールもエラーを表示しません。

background.js:

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "content_script.js"});
});

content_script.js:

var s = document.createElement('script');
s.src = chrome.extension.getURL("create_feed_url.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

create_feed_url.js:

(function(){if(!window.page2rss_bookmark_urlr)window.page2rss_bookmark_urlr=function(ur){if(ur.error)alert(ur.error);if(ur.page&&ur.page.page)location.href=ur.page.page};var r=document.getElementById('urlFormRequest');if(r)r.parentNode.removeChild(r);r=document.createElement('script');r.id='urlFormRequest';r.type='text/javascript';r.src='//page2rss.com/api/page?url='+encodeURIComponent(location.href)+'&callback=page2rss_bookmark_urlr';document.body.appendChild(r);})();

manifest.json:

{
  "permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
  "background" : {
    "scripts": ["background.js"],
    "persistent": false
  },
  "web_accessible_resources": ["create_feed_url.js"],
  "browser_action" :
  {
    "default_icon" : "rss-19.png",
    "default_title" : "Create RSS feed for this page"
  },
  "manifest_version": 2
}
于 2013-08-11T09:36:03.693 に答える