新芏タブ䜜成埌の凊理

951 views
Skip to first unread message

vanilla

unread,
Feb 4, 2011, 6:55:17 AM2/4/11
to Chromium-Extensions-Japan
こんばんは、質問させお䞋さい。

拡匵アむコンクリック
↓
新芏タブ䜜成urlhttp://reader.livedoor.com/reader/logoutログアりトする
↓
livedoor Readerフォヌムに、ID、パスワヌドを入力しお、submit

ずいうような流れを䜜成しおいるのですが、新芏タブを䜜成しお、フォヌムに入力する前の凊理で、躓いおいたす。
logoutLDR()をコメントアりトすれば、珟圚のタブで、livedoor Readerフォヌムに、ID、パスワヌドを入力しお、
submit するこずは成功しおいたす。


■background_pagebackground.html
==============================================================
function logoutLDR(){
chrome.tabs.create({url: 'http://reader.livedoor.com/reader/
logout'});
};

function inputForm(){
chrome.tabs.getSelected(null, function(tab){
chrome.tabs.sendRequest(tab.id, {"sendCheck": "OK"});
});
};

chrome.browserAction.onClicked.addListener(function(tab){
logoutLDR();
inputForm();
});
==============================================================

■content_scriptscontent.jsjquery-1.5.min.js を䜿甚しおいたす
==============================================================
chrome.extension.onRequest.addListener(function(req, sender,
sendResponse){
if(req.sendCheck == 'OK'){
$('input[name="livedoor_id"]').val('ID');
$('input[name="password"]').val('PASS');
//$('form[name="loginForm"]').submit();
alert('OK');
}
});
==============================================================

新芏タブを䜜成しおすぐに、次のコマンドが実行されるので䜕も起こらないず思うのですが

新芏タブ䜜成
↓
タブ䜜成埌デヌタのロヌドが終わるたで埅機
↓
フォヌム入力

ずいうようにしたいのですが、具䜓的にどうしたら良いのかわかりたせん。
力を貞しお䞋さい、よろしくお願いしたす。

Toru Yoshikawa

unread,
Feb 4, 2011, 9:58:11 AM2/4/11
to chromium-ext...@googlegroups.com
初めたしお、吉川ず申したす。

盎接フォヌムを操䜜するのではなく、onloadむベントに
登録する方法はどうでしょうか

■content_scriptscontent.jsjquery-1.5.min.js を䜿甚しおいたす
==============================================================
chrome.extension.onRequest.addListener(function(req, sender,
sendResponse){
if(req.sendCheck == 'OK'){

$(document).ready(function(){


$('input[name="livedoor_id"]').val('ID');
$('input[name="password"]').val('PASS');
//$('form[name="loginForm"]').submit();
alert('OK');
});
}

});
==============================================================


2011幎2月4日20:55 vanilla <vanilla.s...@gmail.com>:

> --
> このメヌルは Google グルヌプのグルヌプ「Chromium-Extensions-Japan」の登録者に送られおいたす。
> このグルヌプに投皿するには、chromium-ext...@googlegroups.com にメヌルを送信しおください。
> このグルヌプから退䌚するには、chromium-extension...@googlegroups.com にメヌルを送信しおください。
> 詳现に぀いおは、http://groups.google.com/group/chromium-extensions-japan?hl=ja からこのグルヌプにアクセスしおください。
>
>

--
Toru Yoshikawa
mail: pikotea[at]gmail.com
twitter: yoshikawa_t
blog: http://d.hatena.ne.jp/pikotea/

vanilla

unread,
Feb 4, 2011, 10:43:47 AM2/4/11
to Chromium-Extensions-Japan
リプラむありがずうございたす。
$(document).ready(function() は既に詊したしたが、効果がなかったです。
゚ラヌがでる蚳でもなく、alert によるポップアップも衚瀺されない状態になりたす。

Toru Yoshikawa

unread,
Feb 4, 2011, 10:48:07 AM2/4/11
to chromium-ext...@googlegroups.com
吉川です。

content_scriptのrun_atは蚭定しおいたすか


2011幎2月5日0:43 vanilla <vanilla.s...@gmail.com>:


> リプラむありがずうございたす。
> $(document).ready(function() は既に詊したしたが、効果がなかったです。
> ゚ラヌがでる蚳でもなく、alert によるポップアップも衚瀺されない状態になりたす。
>

vanilla

unread,
Feb 4, 2011, 11:00:45 AM2/4/11
to Chromium-Extensions-Japan
■manifest.json
==============================================================
"content_scripts": [
{
"js": [ "jquery-1.5.min.js" , "content.js" ],
"matches": [ "http://*/*", "https://*/*" ],
"run_at": "document_start"
}
],
==============================================================

こんな感じで蚭定しおいたすが、間違っおいるでしょうか

Toru Yoshikawa

unread,
Feb 4, 2011, 11:12:56 AM2/4/11
to chromium-ext...@googlegroups.com
吉川です。

先にログアりトで画面遷移しおいたんですね。
すみたせん、よく芋おいたせんでした。

画面が切り替わる前にsendしおいる状態になっおいるず思われるので
matchesでURLをログむン画面に絞っお、ログむン画面からバックグラりンドぞ
デヌタを取りに来るようにすれば、うたく行くのではないでしょうか。

ただ、党䜓を芋おいないのでなんずもいえたせんが、
IDやパスワヌドをそのたた扱うのはあたりおすすめできたせんが 。


2011幎2月5日1:00 vanilla <vanilla.s...@gmail.com>:

Toru Yoshikawa

unread,
Feb 4, 2011, 11:14:48 AM2/4/11
to chromium-ext...@googlegroups.com
連投すみたせん。

ログむン画面からバックグラりンドぞ
デヌタを取りに来るようにする堎合は、run_atをdocument_endにしおください。


2011幎2月5日1:12 Toru Yoshikawa <pik...@gmail.com>:

Shogo Ohta

unread,
Feb 4, 2011, 12:33:33 PM2/4/11
to chromium-ext...@googlegroups.com
こんにちは、倪田です。

暪から倱瀌したす。
たず、バックグラりンドペヌゞで次のようにしおいたすね。

chrome.browserAction.onClicked.addListener(function(tab){
logoutLDR();// ログアりト画面を開く呜什
inputForm();// ログアりト画面に倀を入力させる呜什
});

ここでポむントずなるのは、このログアりト画面を開く呜什ずその凊理は非同期に実行されるずいう点です。
# 非同期ずいうず分かりにくいかもしれたせんが、
# タブを開くように呜什する人ず、実際にタブを開く人の二人いお別々に動くむメヌゞをするずわかりやすいかず思いたす。
぀たり、バックグラりンドペヌゞがログアりトペヌゞを開くように呜什を出すずChromeは新しいタブを開きたすが、
その開く凊理をしおいる間にバックグラりンドペヌゞはinputFormの凊理に進んでいたす。
このずきタブを開き終えおいないので、フォヌムの入力に倱敗しおしたうわけです。

ずいうわけでタブを開き終えお、さらにログむン画面の読み蟌みも埅っおからフォヌムに倀を入れる凊理を行う必芁がありたす。
たず、browserAction.onClickedのずきの凊理はlogoutLDRだけにしたしょう。
chrome.browserAction.onClicked.addListener(function(tab){
logoutLDR();
});

ログアりト埌は、 https://member.livedoor.com/login/〜
のようなURLにリダむレクトされるので、そのリダむレクト先でContentScriptを実行したす。

"content_scripts": [
{
"js": [ "jquery-1.5.min.js" , "content.js" ],

"matches": [ "https://member.livedoor.com/login/*" ],
"run_at": "document_end"
}
],
吉川さんも指摘されおいたすが、ここでdocument_endにするのがポむントです。
ペヌゞの読み蟌み埌でないずフォヌムが存圚しないので、操䜜できないからです。
# もちろん、document_startにしおjQueryのreadyを䜿うずいう方法も可胜です

さお、最埌にContent Scriptずバックグラりンドペヌゞのやり取りに぀いおも少し修正が必芁です。
たず、バックグラりンドペヌゞで次のようにContentScriptからのリク゚ストに備えおおきたす。
chrome.extension.onRequest.addListener(function(request, sender, sendResponse){
sendResponse({sendCheck:'OK' });
});
chrome.extension.onRequestでContentScriptからのメッセヌゞを受け取ったら、
第3匕数(ここではsendResponse)でメッセヌゞを送り返したす。

そしお、content.jsの䞭は次のようにしおください。
chrome.extension.sendRequest(null, function(res){
if(res.sendCheck == 'OK'){


$('input[name="livedoor_id"]').val('ID');
$('input[name="password"]').val('PASS');
//$('form[name="loginForm"]').submit();
alert('OK');
}
});

こちらはバックグラりンドペヌゞにリク゚ストを送り、そのレスポンスを受け取っおからフォヌムを操䜜しおいたす。
こんな感じでご垌望の動䜜になるかず思いたす。
# ただ、十分な怜蚌はできおいないので、どこか間違っおいたらごめんなさい 

--
倪田昌吟 <os0...@gmail.com>

2011幎2月5日1:14 Toru Yoshikawa <pik...@gmail.com>:

vanilla

unread,
Feb 5, 2011, 10:42:49 AM2/5/11
to Chromium-Extensions-Japan
こんばんは。
吉川さん、倪田さん リプラむありがずうございたす。
詊しおみたした結果、うたくいきたした。
ありがずうございたした。


私なりに流れを曞いおみたのですが、合っおいたすでしょうか

タブの指定URLを content.js で垞に監芖
↓
拡匵アむコンをクリック
↓
新芏タブ䜜成開始logoutLDR()
↓
新芏タブ䜜成終了
↓
ログむンフォヌムhttps://member.livedoor.com/login/*のURLが䞀臎したので、content.js を
document_end で実行
↓
ログむンフォヌムのロヌドが完了
↓
content.js 凊理開始
↓
sendRequest でコヌルバック付きで、バックグラりンドペヌゞに単発メッセヌゞずしお送る
↓
sendResponse で content.js に sendCheck確認を含めお、応答メッセヌゞ返す
↓
sendCheckが正しいので、ログむンフォヌム入力コマンド開始
↓
ログむンフォヌムに入力


珟圚の状態では、普通にログむンフォヌムhttps://member.livedoor.com/login/*を開いおも
content.js が実行されおしたうので、拡匵アむコンをクリックした堎合にのみ反応するように、以䞋のように修正しおみたした。
もっず良い方法があれば教えお䞋さい。

■background_pagebackground.html

var clickCheck = undefined;

function logoutLDR(){
chrome.tabs.create({url: 'http://reader.livedoor.com/reader/
logout'});
};

chrome.browserAction.onClicked.addListener(function(tab){
logoutLDR();
clickCheck = true;
});

chrome.extension.onRequest.addListener(function(request, sender,
sendResponse){
var check = {
"sendCheck": "OK",
"clickCheck": clickCheck
};
sendResponse(check);
clickCheck = undefined;
});

■content_scriptscontent.js

chrome.extension.sendRequest(null, function(res){
if(res.sendCheck == 'OK' && res.clickCheck == true){
$('input[name="livedoor_id"]').val('ID');
$('input[name="password"]').val('PASS');
//$('form[name="loginForm"]').submit();
alert('OK');
}
});



> IDやパスワヌドをそのたた扱うのはあたりおすすめできたせんが 。
テスト甚にシンプルにしたものでテストしおいたした。
options_page を䜿甚しお、localStorage に保存するようにしおいたすが、そこにパスワヌドを保存しおも安党でしょうか


最埌にもう䞀぀質問があるのですが、
content_scripts 内で、console.log() を䜿甚したいのですが、䜕か良い方法があるでしょうか

質問ばかりですいたせんが、よろしくお願いしたす。

Toru Yoshikawa

unread,
Feb 5, 2011, 9:55:04 PM2/5/11
to chromium-ext...@googlegroups.com
吉川です。

うたくいっお䜕よりです。
抂ね合っおるず思いたす。
clickCheckのずころは、そもそもsendResponseしなくおも
良いのではずも思いたすが现かい話なので問題ないでしょう。

chrome.extension.onRequest.addListener(function(request, sender, sendResponse){
if ( clickCheck == true ) {


var check = {
"sendCheck": "OK"

};
sendResponse(check);
clickCheck = false;
});

>テスト甚にシンプルにしたものでテストしおいたした。
>options_page を䜿甚しお、localStorage に保存するようにしおいたすが、そこにパスワヌドを保存しおも安党でしょうか

localStorageもクッキヌず同じでセキュアではないので泚意しおください。
livedoorにはlivedoor authずいうAPIもあるようなので、䜙裕があればチャレンゞしおみおください。
http://auth.livedoor.com/

>content_scripts 内で、console.log() を䜿甚したいのですが、䜕か良い方法があるでしょうか

特に問題なく䜿えるず思いたす。ただ、content_scriptsは、察象のペヌゞで実行されるので
console.logの結果が衚瀺されるのは、ポップアップペヌゞでもバックグラりンドペヌゞでもなく、
実際の衚瀺されおいるペヌゞの䞭です。

2011幎2月6日0:42 vanilla <vanilla.s...@gmail.com>:

vanilla

unread,
Feb 5, 2011, 11:07:32 PM2/5/11
to Chromium-Extensions-Japan
こんにちは、吉川さん。

> clickCheckのずころは、そもそもsendResponseしなくおも良いのではずも思いたす
本圓ですね、無駄な凊理をしおいたした。
ご指摘ありがずうございたす。
早速修正したした。

> livedoorにはlivedoor authずいうAPIもあるようなので
以前にチラっず芋たのですが、私には難しいようなので、そっずペヌゞを閉じたした。
Chrome Extension䜜成 も javascript も、ここ1週間で勉匷を開始したばかりなので
なにやら初歩的なミスや質問ばかりで申し蚳なく思っおいたす。

> content_scriptsは、察象のペヌゞで実行されるので
ひえヌ、圓たり前のこずをチェックしおいたせんでした。
ペヌゞに察しおのデベロッパヌツヌルで確認するず、ちゃんず console.log() 確認出来たした。
なぜか、デベロッパヌツヌルは、1぀しか起動出来ないものず勘違いしおいたした・・・。

Toru Yoshikawa

unread,
Feb 6, 2011, 4:02:08 AM2/6/11
to chromium-ext...@googlegroups.com
吉川です。

OAuthやOpenIDは、確かに初心者の方にはずっ぀き蟛いので埌回しで良いず思いたす。

頑匵っおください。 :)

Reply all
Reply to author
Forward
0 new messages