-2

WebExtensions APIを使用してChrome拡張機能をFirefoxアドオンに移植しようとしています。 JavaScriptファイルを読み込むためにRequireJSを使用しています。 下記のコードはChrome拡張機能で正常に動作していますが、Firefoxでは正常に動作していません。FirefoxでJavaScriptを使用できないようにするにはWebExtensionsアドオン

誰もがこれに関する助言をお持ちですか?ありがとう。

manifest.jsonを

{ 
"name": "Firefox WebExtension", 
"version": "0.0.5", 
"manifest_version": 2, 
"description": "First Firefox WebExtensions", 

"icons": { 
    "16": "img/c-ext3.png", 
    "48": "img/c-ext3.png", 
    "128": "img/c-ext3.png" 
}, 
"background": { 
    "scripts": [ 
     "js/vendor/require.js", "js/config/loader.js", "js/config/requireInit.js" 
    ] 
}, 
"applications": { 
    "gecko": { 
     "id": "[email protected]ozilla.org", 
     "strict_min_version": "44.0", 
     "strict_max_version": "50.*" 
    } 
}, 
"browser_action": { 
    "default_icon": "img/c-ext3.png", 
    "default_title": "Firefox WebExtension", 
    "default_popup": "src/browser_action/browser_action.html" 
}, 

"permissions": [ 
    "contextMenus", 
    "cookies", 
    "http://*/*", "https://*/*", "file://*/*", 
    "notifications", 
    "tabs", 
    "<all_urls>" 
], 

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", 


"content_scripts": [{ 
    "matches": ["http://*/*", "https://*/*"], 
    "js": ["js/vendor/require.js", "js/config/loader.js", "js/config/requireInit.js"] 
}], 
"web_accessible_resources": [ 
    "js/*", "src/*", "css/*", "img/*" 
]} 

loader.js

require.load = function(context, moduleName, url) { 

    var xhr = new XMLHttpRequest(), 
     evalResponseText = function(xhr) { 
      eval(xhr.responseText); 
      context.completeLoad(moduleName); 

     }; 

    xhr.open("GET", url, true); 
    xhr.onreadystatechange = function(e) { 
     if (xhr.readyState === 4 && xhr.status === 200) { 
      evalResponseText.call(window, xhr); 
     } 
    }; 
    xhr.send(null); 


}; 

requireInit.js

var baseUrl=browser.extension.getURL("/"); 
requirejs.config({ 
    config: { 
     text: { 
      useXhr: function (url, protocol, hostname, port) { 
       // allow cross-domain requests 
       // remote server allows CORS 
       return true; 
      } 
     } 
    }, 
    skipDataMain: true, 
    baseUrl: baseUrl, 
    paths: { 
     "jquery": "js/vendor/jquery", 
     "underscore": "js/vendor/lodash", 
     "backbone": "js/vendor/backbone", 
     "marionette": "js/vendor/marionette", 
     "app": "js/app" 
    } 
}); 

console.log("before loading files");//working 

require(['jquery', 'app/csApp'], function ($, app) { 
    console.log("all js loaded");//not working 
}); 

csApp.js

console.log("inside cs app");//working 
    define(function(require) { 
     'use strict'; 
    var $ = require('jquery'), 
     _ = require('underscore'), 
     Backbone = require('backbone'), 
     Marionette = require('marionette'), 
     csApp = new Marionette.Application(); 

     console.log("csApp");//not working 
      return csApp; 
    }); 

編集:jQueryの作品内のconsole.log()。しかし、console.log()の中にcsApp.jsが機能していません。

+1

だから、Firefoxが提供する診断ツールとコンソールを見ると、そこには何が見えますか?そこには何もロードされていますか?負荷がかかるものとそうでないものがあります。これらの詳細を追加するには、質問を編集してください。あなたの質問にあなたが提供する情報を使って、 'requireInit.js'がFirefoxで実行されないことがありますが、これは単なる推測です。 – Louis

+0

あなたのアドバイスのおかげで@ルイスは編集を参照してください。 – sweeta

+0

私は私のコメントで表現した可能性を排除しました。良いですが、あなたが私のコメントの冒頭で尋ねた質問には一切答えなかった。あなたの質問を編集して回答してください。 – Louis

答えて

-1

問題の原因が見つかりました。

これはLodashです。

私はunderscore.jsの代わりにlodash.jsを使用していました。

LodashはFirefox 45-46と互換性があり、最新のfirefoxつまり47.0を使用しています。だから、私はlodashをアンダースコアに置き換えて、今ではWeb拡張機能がうまく動作しています。

関連する問題