2012-01-24 6 views
4

私はこれをベータビルダーで構築しています。私はcontentScriptFile内でAJAXコールを取得する方法については本当に失われています。私は、ページの内容を変更できるように、スクリプトにデータバッグを動的に引き出すためにajaxリクエストを引き出したいと思います。私は探していて、間違った言葉を探しています。ヘルプは高く評価されています!おかげPageModからのAjaxリクエストの作成ContentScriptFile

main.js

コード:

exports.main = function() {}; 
var data = require("self").data; 
var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: "http://www.mozilla.org/*", 
    contentScriptWhen: 'ready', 
    contentScriptFile: [ 
     data.url('jquery.1.7.1.js'), 
     data.url('common.js'), 
     data.url("mozilla.top.js") 
    ] 
}) 

mozilla.top.js

コード:最終目標に光を当てるために

var qs = parseQS(); 
var foo= qs['string']; 
var Request = require('request').Request; 

Request({ 
    url: "http://www.myremotepage.org?q="+foo, 
    onComplete: function (response) { 
    alert(response); 
    } 
}).get(); 
alert('test'); 

古いコード - HTTPリクエストブラウザで動作しても、何も返しません。サードパーティ製のajaxツールの権限の問題であり、上記でアドオンリクエストツールを使用して起動したと仮定します。

コード:あなたが持っている

/* 
$.ajax({ 
    url: 'http://www.myremotepage.org?q='+foo, 
    data: {q:strSearchQuery}, 
    dataType: 'json', 
    success: function(data) { 
     var div = $("<div style='background-color: #ececec;'><h2 style='text-align: right; font-size: 11px; color: #666;'>Test</h2><ul id='ptcid'></ul></div>"); 
     alert(data.length); 
     for(var i = 0; i < data.length; ++i) 
     { 
      alert('test'); 
      div.find('ul').append('<li></li>'); 
      div.find('ul li:last').append('<h3>' + data[i].header+ '</h3>'); 
      div.find('ul li:last').append('<div>'+data[i].body+'</div>'); 
      div.find('ul li:last').append('<div>' + data[i].footer + '</div>'); 
     } 
     div.insertBefore('#header'); 
    } 
}); 
*/ 
+0

[JSONPコールバック・エラー](http://stackoverflow.com/questions/8961091/jsonp-callback-error)の可能性の重複。少なくとも私の答えはあなたの質問にも当てはまります。 –

+0

リクエストはmain.jsにあり、コールバックはmozilla.top.jsにありますか? pagemodが準備ができるまで、要求はどのように待つのですか?また、安全でないウィンドウを使用しないようにするためには、正しい方法が必要です。 – user550574

答えて

2

一つの当面の問題はmozilla.top.jsは、コンテンツスクリプトとして追加されていることである、と要求モジュールを使用しようとします。コンテンツスクリプトでリクエストなどのSDKモジュールを使用することはできません。代わりにmain.jsでリクエストを行い、worker.port.emit()を使用してコンテンツスクリプトにリクエストデータを配信する必要があります。ドキュメントは、コンテンツスクリプト通信に関するいくつかの詳細に入る:

https://addons.mozilla.org/en-US/developers/docs/sdk/1.4/dev-guide/addon-development/content-scripts/using-port.html

サンプルの実装は次のようになります。あなたのコンテンツスクリプトで

var pm = require("page-mod").PageMod({ 
    include: [page_url], 
    contentScriptFile: [data.url('jquery.min.js'), data.url('panel.js')], 
    onAttach: function(worker) { 
     Request({ 
      url: "http://dl.dropbox.com/u/1212936/test.json", 
      onComplete: function (response) { 
       var parsed = JSON.parse(response.text); 
       worker.port.emit('got-request', parsed); 
      } 
     }).get(); 
    } 
}); 

:あなたは「得た要求にリスナーを添付します'イベント:

self.port.on('got-request', function(data) { 
    console.log(data); 
    $('#data').html(pp(data)); 
}); 

ここでは、このコードを使用していますビルダーの作業例だ - それは非常に非常に単純ですが、うまくいけば役立ちます:

https://builder.addons.mozilla.org/addon/1034982/latest/

関連する問題