ポップアップ内でのページ遷移について

994 views
Skip to first unread message

ponkotsu

unread,
Mar 25, 2011, 11:18:34 AM3/25/11
to Chrome API Developers JP
こんばんは。ponkotsuと申します。
長文、乱文になりますがお許し下さい。

現在、Chrome内からTwitterに現在見ているページをつぶやく拡張を開発しています。
ほとんど完成し、知り合いにテストしてもらったのですが、BrowserActionのPopupに何も表示されないとのことでした。

知り合いのChromeのバージョンは10.0.648.204(最新版)だそうです。
自分の開発環境は10.0.648.151でした。
また、自分も10.0.648.204にアップデートして試してみたところ、同様の現象が確認されました。

backgroundのスクリプトは以下のようにしております。

var callbacks = [];

function getSelection(callback) {
chrome.tabs.getSelected(null, function(activeTab) {
if (activeTab.url.indexOf('https://') >= 0) {
window.alert('保護されたページです。\n選択部分は無視されます。');
callback({"text": ""});
} else {
callbacks.push(callback);
chrome.tabs.executeScript(null, { file: "content_script.js" });
}
});
};

chrome.extension.onRequest.addListener(function(request) {
var callback = callbacks.shift();
callback(request);
});

問題のpopup.htmlです。

function pageMove() {
var bg = chrome.extension.getBackgroundPage();
bg.getSelection(function(selection) {
chrome.tabs.getSelected(null, function(tab) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 短縮URLを取得するAPI, true);
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
document.location = 'ツイートページ';
}
};
});
});
}

pageMove()をbodyのonloadで呼び出しています。
自分なりにデバッグしてみたところ、popup.htmlのdocument.locationが働いていないことがわかりました。
10.0.648.204では、popup内でのページ遷移を認めていないのでしょうか?
一度10.0.648.151にダウングレードしてみたところ(もちろん一切ソースの変更なし)、しっかりと動きました。
どのようにすれば、この問題を解決できますか?

10.0.648.204で動かなく、10.0.648.151では動くという、特殊(?)なことだとは思いますが、皆さんのアドバイスをいただけない
でしょうか。
よろしくお願いします。

ponkotsu

ひよこ3分07秒

unread,
Mar 25, 2011, 10:18:26 PM3/25/11
to Chrome API Developers JP
はじめまして。
よろしくお願いします。

自分もポップアップでページ遷移させようとしてはまったことがあります。
いろいろ試したんですがうまくいきませんでした。

最終的にはポップアップのhtmlにはiframeだけにして、
その中身を遷移させて対処しました。
なんかスマートじゃないですが。。。

Shogo Ohta

unread,
Mar 26, 2011, 8:19:20 AM3/26/11
to chrome-api-d...@googlegroups.com
こんにちは、太田です。

ポップアップの中では拡張の権限に従ってクロスドメインなリクエストやタブの操作などができるので、
直接外部のページを表示できないように制限された(そういう挙動は以前からあったので、それが強化された)
のだと思います(あくまで推測です)。

この場合、ひよこ3分07秒さんのおっしゃるとおり、iframeを使うのが良いと思います。
もしくは自前でリクエストをTwitterになげるという方法もありますが、APIの関係で少々手間かと思います。

2011年3月26日11:18 ひよこ3分07秒 <chic...@gmail.com>:

> --
> このメールは Google グループのグループ「Chrome API Developers JP」の登録者に送られています。
> このグループに投稿するには、chrome-api-d...@googlegroups.com にメールを送信してください。
> このグループから退会するには、chrome-api-develop...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/chrome-api-developers-jp?hl=ja からこのグループにアクセスしてください。
>

ponkotsu

unread,
Mar 27, 2011, 10:32:18 AM3/27/11
to Chrome API Developers JP
こんばんは、ponkotsuです。

お二方のアドバイスに従い、iframeを使用することにしました。

太田様、ひよこ3分07秒さま、今回は本当にありがとうございました。

On 3月26日, 午後9:19, Shogo Ohta <os0...@gmail.com> wrote:
> こんにちは、太田です。
>
> ポップアップの中では拡張の権限に従ってクロスドメインなリクエストやタブの操作などができるので、
> 直接外部のページを表示できないように制限された(そういう挙動は以前からあったので、それが強化された)
> のだと思います(あくまで推測です)。
>
> この場合、ひよこ3分07秒さんのおっしゃるとおり、iframeを使うのが良いと思います。
> もしくは自前でリクエストをTwitterになげるという方法もありますが、APIの関係で少々手間かと思います。
>
> 2011年3月26日11:18 ひよこ3分07秒 <chick...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages