0

我想创建一个带有浏览器操作的 Chrome 扩展,onClicked它提供与以下书签相同的功能:

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.js中并在background.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

我通过一种解决方法解决了这个问题,在关闭它之前调用在新选项卡中生成新提要的 URL,最后跳转到带有最终 RSS 提要 URL 的选项卡。此解决方案不需要create_feed_url.js但完全依赖于background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    // Original bookmark JS code
    //(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);})();

    var create_feed_url = "http://page2rss.com/api/page?url=" + encodeURIComponent(tab.url); //+ "&callback=page2rss_bookmark_urlr" 
    var feed_url = "http://page2rss.com/page?url=" + tab.url;

    chrome.tabs.create({"url": create_feed_url, active: false}, function(tab) {
        chrome.browserAction.setBadgeText({text: 'wait'});
        setTimeout(function() { 
            chrome.tabs.remove(tab.id, function(tab) {
                chrome.browserAction.setBadgeText({text: ''});
            }); 

        }, 5000);
    });

    setTimeout(function() { 
        chrome.tabs.create({"url": feed_url, active: true}, function(tab) {
            chrome.tabs.onUpdated.addListener(function( tabId , info ) {
                if ( info.status == "complete" ) {
                    chrome.browserAction.setBadgeText({text: 'done', tabId: tabId});
                }
            });
        }); }
    , 1000);    
});
于 2013-08-08T20:11:28.703 回答
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 回答