1

ご存じのとおり、 $.ajax(..) リクエストを別のドメイン (クロスドメイン) に送信すると、ほとんどのブラウザーは次のような例外をスローします。

 XMLHttpRequest cannot load http://mysite.com/test.php. Origin
 http://127.0.0.1:8888 is not allowed by Access-Control-Allow-Origin.

Chrome 拡張機能を作成していますが、Web サイトにリクエストを送信する必要があります。まず、上記のメッセージも表示されることを期待していました。しかし、うまく機能しているのを見ると混乱しました。

まず、それは良さそうです、それは働いていて、私は欲しいものを持っています. しかし、それは恐ろしいことです。誰もがそのような方法 (単純なスクリプトのみ) を使用して、私のサイトを攻撃し、そのデータを取得できます。

もちろん、グラブは他の方法でも発生する可能性があります。私はAPIプログラミングとChrome拡張が初めてです。誰か道を教えてくれませんか?

マニフェスト.json

{
  "manifest_version": 2,
  "name": "MyTestExtension",
  "description": "this extension is for test",
  "version": "1.0",
  "icons": {
    "128": "icon.png"
  },
  "browser_action": {
    "default_icon": "icon.png" 
  },
  "permissions": [
    "tabs" ,
    "*://*/*"
  ],
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["jquery-1.7.2.min.js","content_script.js"],
      "run_at": "document_end"
    }
  ]  
}

content_script.js

$(document).ready(function(){
    $('html').mouseup(function() {
        var selectedText = getSelectedText();
        if(selectedText > ''){
            my_syncTest(selectedText)      // here : selected test send to my site
        }
    });

    function getSelectedText() {
        if (window.getSelection) {
            var selection = window.getSelection().toString();
            if(selection.trim() > ''){
                return selection;
            }
        } else if (document.selection) {
            var selection = document.selection.createRange().text;
            if(selection.trim() > ''){
                return selection;
            }
        }
        return '';
    } });


function my_syncTest(word){
var qs = 'word='+word+'&header=555&simwords=1'; 
$.ajax(
  {
   type: "POST", 
   url: 'http://mysite.com/test.php',
   dataType: 'json', 
   data : qs, 

  success:function(res){
    console.log(res.success +" - "+ res.idWord + " - " + res.header +" - " + res.meaning);
  }});
}
4

1 に答える 1

8

マニフェストでこれらのアクセス許可を定義したため、拡張機能からの XMLHttpRequests が機能します。

"permissions": [
    "*://*/*"
]

ユーザーが拡張機能をインストールすると、この拡張機能がすべてのサイトのデータにアクセスできることが通知されます。ワイルドカードではなく、必要な正確なサイトのみを含めることをお勧めします.

http://developer.chrome.com/extensions/xhr.html

このメカニズムは、サイトを保護するためではなく、ユーザーを保護するためのものです。誰もがあなたの API を使用したくない場合は、API キーを使用するか、oAuth を調べてください。

http://en.wikipedia.org/wiki/OAuth

クロス オリジン リクエストについて詳しく知りたい場合:

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

于 2013-09-01T20:38:03.697 に答える