2017-02-26 1 views
0

私は、テキストエリアをAceエディタに変換する小さなブラウザエクステンションを作成しています。私はSQLモードでエースエディタを開始しています。これには、いくつかの外部JSファイルをAceエディタでダウンロードする必要があります。Chrome拡張機能のエースエディタが間違った場所からファイルを取得します

しかし、拡張機能が実行されている現在のサイトからファイルを取得しようとします。

GET https://example.com/theme-clouds.js 
GET https://example.com/mode-sql.js 

私はエースを作るにはどうすればよい -

manifest.jsonを

... 
"content_scripts": [ 
    { 
     "matches": ["https://workbench.developerforce.com/query.php*"], 
     "css": [ 
     "styles/extension.css" 
     ], 
     "js": [ 
     "scripts/jquery.min.js", 
     "scripts/ace.js", 
     "pages/init.js" 
     ] 
    } 
] 
... 

それは、このような要求を送信したときに、私は404エラーを取得

init.js拡張子のfからファイルを取得するilesまたはCDNから?

+1

[web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources)でテーマパスを公開し、[ace.config.set](https://stackoverflow.com/a/18347807)を使用してください。 – wOxxOm

+0

@wOxxOm - ああ!これは私が探していたものです。答えとして投稿してください! – JRodDynamite

答えて

1

jQueryを使用していますので、cdnからスクリプトを読み込み、読み込みが成功した後にsetTheme()を呼び出すために、jQueryの.getScript()を使用する方法を参照してください。

$.getScript("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/theme-clouds.js", function(){ 
    editor.setTheme("ace/theme/clouds"); 
}); 

setMode()ため

$.getScript("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/mode-sql.js", function(){ 
    editor.getSession().setMode("ace/mode/sql"); 
}); 

それは柔軟性のために以下の機能を使用する意味があります:

function changeAceTheme(edtr, thm) { 
    $.getScript("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/theme-" + thm + ".js", function() { 
     edtr.setTheme("ace/theme/" + thm); 
    }); 
} 

function changeAceMode(edtr, mde) { 
    $.getScript("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/mode-" + mde + ".js", function() { 
     edtr.getSession().setMode("ace/mode/" + mde); 
    }); 
} 

と、このようにそれらを呼び出す:

changeAceTheme(editor, "clouds") 
changeAceMode(editor, "sql") 
+0

これは行く方法の1つです。感謝します! – JRodDynamite

+0

しかし、私が間違っていない場合、別の解決策が必要です。私が複数のテーマを選択したいと言うなら、この解決法は少し複雑になるでしょう。 – JRodDynamite

+0

'setTheme()'でcdn pathを使ってみましたが、相対パスを強制しているようです。これは公式のAPIが言っているので私の唯一の方法かもしれません: "テーマは存在しなければならず、ディレクトリパスでなければなりません" cdnからロードするフラグを含めることを望みますが、現在はコマンドを呼び出す前にテーマをロードする必要があります。 –

0

aceを含むフォルダをマニフェストのweb_accessible_resourcesセクションに追加し、スクリプト要素を使用してエースをロードします。

関連する問題