Home > Tags > javascript

javascript

chromeでyoutubeを見たときjavascript:console.log(window);が空になる問題

youtubeの動画URLを抽出するブックマークレットを作っているときになりました・・・。
これでいったい何時間費やしただろう・・・疲れた・・・。

【現象】

  1. google chrome でyoutubeの動画ページを開く(http://www.youtube.com/watch?v=**********)
  2. 動画抽出系のブックマークレットを起動する(何種類か試したけど全部だめ)
  3. なぜか正常に動作しない

【ここから試行錯誤】

まずはブックマークレット事態がおかしいと思いいろいろ調べる、というか製作者のサイトではchromeの動作確認が取れてることを確認。
ブックマークレットの中身のjavascriptを調べる。
どうやらwindowオブジェクトにアクセスしても中身が空っぽの模様。

 

謎1:

youtubeを開いてchromeのデベロッパーツールでconsole.dir(window);だと正常に取得できる。
けど、javascript:console.dir(window);にしてみるとwindowが空になる。

<html>
<head>
</head>
<body>
</body>
</html>

(もう直ったから試せないけど、構造はこんな感じだったと思う)

謎2:

というか謎1の時、デベロッパーツールを起動してブックマークレットを起動すると、デベロッパーツールが一度終了する・・・。
空の構造に書き換わってるからかな?でもブラウザ上では画面遷移はなし・・・。

謎3:

動画ページじゃなくyoutubeのトップページ(http://www.youtube.com/)でもダメだった。
自分のブログやyahooのトップページだと、正常にwindowが取れた・・・。

【解決方法】

chromeをアンインストールして再インストールすると問題が直ったという情報を発見。
アンインストール後に再インストールするも「chrome.exeを探しています・・・」というダイアログが表示される。
いろいろ調べるも、Cドライブにインストールされていない模様。
ファイル・フォルダ検索で「chrome」を探すも出てこない。(余計なのは出た)

ここらでヤケクソand諦めムード

もう一度アンインストール→再起動→CCleanerというソフトでレジストリ他いろいろお掃除→再起動→https://support.google.com/chrome/bin/answer.py?hl=ja&answer=126299から代替オフライン版のインストーラーを取ってきて実行。

できたあああああああああああああああああああああああああ

 

レジストリの掃除が効いたのか代替オフライン版が効いたのかよく分かりません。

【第3回】youtubeのURLをブクマで取得→videoに設定【HTML5で作る動画コミュニティサイト】

前回のエントリーをあとで見直すと動画がみれない事に気がついた。

youtubeをみてソースを表示して動画URLを直張りしていたけど、一定時間が経つと見れなくなるらしい。
そこで次のように考えた。

  1. http://www.youtube.com/watch?v=00000のようなURLから動画URLを抜き出すPHP作る
  2. そのPHPと動画プレーヤーのHTMLをajaxを使って画面遷移なしにやりとり
  3. ヨカッタドウガミレタヨー

ローカルでやるとうまくいった。けどネットにあげるとできなかった。
なんかローカル環境で取得したyoutubeの動画URLと、ネット環境で取得したyoutubeの動画URLが違う。
youtubeのセキュリティだとは思うけど、ググっても具体的な仕組みが分からなかった。
サブアドレスにプロバイダーっぽい文字があったから、IPで動的にURLを生成しているのかな?(KDDIがあった)
リファラーやユーザーエージェントは偽装できるけど、IPアドレスは難しいとか聞いたことがあったようなないような・・・。

 

いろいろかんがえたけど、自分のサイトで不特定多数の人にyoutubeの動画を見れるようにするには、その人がyoutubeにアクセスするしか方法がないと結論。
外部プレーヤーやapiを使うのはなしの話で。
そういや動画寄生サイトもyoutubeは外部プレーヤーを使っていたな~とここでふと思い出す。

 

んでもって、調べているうちにブックマークレットで見ているyoutubeの動画URLを抜き出す、というのを発見したのを思い出す。

  1. youtubeを見る
  2. ブクマでURLを取得して自分のサイトに移動する
  3. getクエリの文字列から動画URLを取得してvideoタグに設定

これなら大丈夫そう。ちょっとめんどいけど。

できたのが次のjavascript

javascript:(
function(){
var ids=[
'watch-headline',
'playnav-panel-info',
'ud',
'vt',
'watch-actions',
'watch-info',
'watch-panel',
'masthead'
],
no_flv=true,
f={},
e,f,g,i,j,s,t,
ti='video',
x,map,
r='';
for(i in ids)
if(e=document.getElementById(ids[i]) )
break;
if(!e)
return;
try{
if(yt&&yt.getConfig)
map=yt.getConfig('PLAYER_CONFIG').args.url_encoded_fmt_stream_map;
}
catch(t){}
if(!map){
x=document.getElementsByTagName('body')[0].innerHTML;
if(x.match(/&(amp;|)url_encoded_fmt_stream_map=([^&">]+)/)){
map=decodeURIComponent(RegExp.$2);
}
else if(x.match(/[\'\"]PLAYER_CONFIG[\'\"]\s*:\s*({.*})/)){
map=eval('('+RegExp.$1+')').args.url_encoded_fmt_stream_map;
}
}
if(!map)
return;
map=map.split(',');

for(i in map){
x=map[i].split('&');
f={};
for(j in x){
g=x[j].split('=');
f[g[0]]=g[1];
}
if(f['type']&&f['type'].match(/video\/([a-zA-Z0-9_\-]+)/))
t=RegExp.$1;
if(no_flv&&t=='x-flv')
continue;
r += '&u=' + f['url'];
}
r = 'http://www.hk-factory.net/wp-content/uploads/2012/01/sample_03_018.html?' + r.substr(1);
window.open(r, null);
})()

この手間をメリットに変えれればいいけどな~と
まだぼや~っとしたものしか見えないけど。

先は長いな~

 

上のブックマークレットは次のURLを参考にしました
うえぽんSW局

javascriptでクッキーを使う場合の注意点

次回作のFC2共有プラグインでクッキー(Cookie)を使ってみようと思う。

クッキーについては知っていたけど、深い仕組みは知らない部分もあったのでメモメモ。

 

保存する情報にはname、expires、domain、path、secureがある

name・・・クッキーの名前

expires・・・クッキー の有効期限。省略するとブラウザを終了させるまでが期限。過去の値を指定するとCookieを削除

domain・・・クッキーを発行する Webサーバー

secure・・・サーバーとの接続がセキュアである時のみクッキーを送信

 

クッキーの期限は無制限にはできない。クッキーを削除するには過去の日付を指定。この2点が新発見だった。

FC2プラグインCustomRssReaderようやく完成&感想

やっと一通り終わったー・・・

いつもながら製作作業で40%、修正・検証作業で60%ぐらいだった。

あとはうまく申請が通るといいんだけど・・・。

 

何を作ったかというと、javascriptだけでできるRSSリーダーです。

外部のRSSを読み込むとなるとクロスドメインの問題で読み込めないんですが、そこをYQLを使ってごにょごにゅしてブログパーツにしてみました。

jqueryプラグインとして公開しているので、興味のある方はご覧下さい。

http://hkdesign.blog91.fc2.com/blog-entry-119.html

 

 

IE6と7でjqueryのajax()を使うとエラーが出る・・・

htmlに外部javascriptのファイルを読み込んで

その外部javascriptファイル内で$.ajax()を実行するとエラーが出るんです。

同じように$.getJSON()を使ってもエラー・・・。

 

いろんなサンプルサイトをIEで開くと動作する

自分の作ったjavascriptだけエラーがでる・・・

もしやローカルの環境だからできない・・・?

ネットにアップしてもエラー・・・

そういえばIEのajaxって文字コードがうんたらかんたら・・・

htmlのcharset=euc-jpをutf-8にしたら成功

フォオオオオオオオオオオオオオオオオオオオオオオオオ!!!

 

jsonを取得する時にサーバー側のContet-Typeをutf-8にしないとエラーが出るとは聞いてたから

html側の文字コードは完全にノーマークだった・・・

 

htmlと外部javascriptとサーバーの文字コードを統一すれば直るかな・・??

もうちょっと検証してみる

 

FC2ブログはeuc-jpで作らないと文字化けするっぽいしなぁ・・・どうしたものか

 

 

【追記】

scriptCharsetを設定するだけで解決した・・・

とりあえずめでたしめでたし

Home > Tags > javascript

twitter
リンク

Return to page top