1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

学校のiPadでweb開発

Posted at

MDM管理下でweb開発する方法です。
...なんかどっかでみたような気が...
※サービス名などは不都合が生じるとまずいので全て伏せています。

うちの構成

iPad 8th gen.

ただの板。全然愛がないiPad(さっむ)であり、ホームすら変更できないほど厳しい。
MDM(もび接続)と愛がないfilterは機能自体に不満はない。むしろここまでロックできるから賞賛もの。設定している人が悪いだけ。
GIGAスクールとか言ってるのにIDE(codepen)とかレンタルサーバー(XFREE)までも規制されている。

鬼filter

極悪。
Gmailですら規制。
上述したようにIDE、レンタルサーバーまでも規制。
家でも使いたいほど機能は優秀だが、設定している人の頭がおかしい。

もびい

官公庁御用達のMDM。
設定している人が極悪で、ホーム画面のレイアウトまでも規制済み。
ブラウザ上のFTPも規制済み。

Rugged Combo 3

ただのソフトケース。
打ちやすさはまぁまぁ。
タッチパッドが欲しかったなぁ...

そしてここから本題

まずはショートカットを追加する。
about:blankを開いて、ブックマークに追加。
その後、以下を設定。
※なんとsafariではURIエンコードが勝手に走るのでそのまま。

  1. eval(おすすめ)
    javascript:%20var%20s%20=%20prompt(%22eval%22,%20%22alert()%22);%20eval(s);
    
  2. viewsource(おすすめ)
    javascript:(function()%7Bvar%20d%3Ddocument%2Cs%2Ce%3Bvar%20el%3Dd.getElementById('snpy')%3Bif(typeof%20Snoopy!%3D'undefined')%7BSnoopy.toggle()%3Breturn%7Delse%20if(el)%7Bel.className%3D%2Fclosed%2F.test(el.className)%3Fel.className.replace('closed'%2C'')%3Ael.className%2B'%20closed'%3Breturn%7Ds%3Dd.createElement('link')%3Bs.setAttribute('href'%2C'https%3A%2F%2Fjf6deu.net%2Fsnoopy-min.css')%3Bs.setAttribute('rel'%2C'stylesheet')%3Bs.setAttribute('type'%2C'text%2Fcss')%3Bd.getElementsByTagName('head')%5B0%5D.appendChild(s)%3Be%3Dd.createElement('script')%3Be.setAttribute('src'%2C'https%3A%2F%2Fjf6deu.net%2Fsnoopy-min.js')%3Bd.getElementsByTagName('body')%5B0%5D.appendChild(e)%7D)()%3B
    
    こっちはSnoopyをSSL非対応だからとうちのサーバーでホスト
  3. ffmpeg
    https://ffmpeg-online.vercel.app/
    珍しくここはただのURL
  4. cookie削除
    javascript:document.cookie.split(';').forEach(cookie%20=%3E%20document.cookie%20=%20cookie.replace(/%5E%20+/,%20'').replace(/=.*/,%20%60=;max-age=$%7B0%7D;%60));
    
    正規表現を使って短くまとめた自信がある
  5. Unicode
    javascript:alert(eval(%22String.fromCodePoint(%22+prompt('string%20code')+%22)%22))
    
    ただfromCodePointで引いただけ
  6. about:blank
    about:blank
    やっと出ました、そしてただこれだけ
  7. 天気予報(CITYNUMを変えてね)
    javascript:%20function%20start()%20%7B%20var%20fr%20=%20document.createElement('iframe');%20fr.src%20=%20%22https://eco.mtk.nao.ac.jp/cgi-bin/koyomi/sunmoon.cgi?id=45%22;%20fr.style.width%20=%20%22180px%22;%20fr.style.height%20=%20%22370px%22;%20fr.setAttribute(%22frameBorder%22,%20%220%22);%20var%20body_node%20=%20document.querySelector(%22body%22);%20body_node.appendChild(fr);%20var%20file%20=%20new%20XMLHttpRequest();%20file.open('GET',%20'https://weather.tsukumijima.net/api/forecast?city=CITYNUM');%20file.send();%20var%20tenkidiv%20=%20document.createElement('div');%20tenkidiv.id%20=%20%22tenki_disp%22;%20body_node.appendChild(tenkidiv);%20file.onreadystatechange%20=%20function()%20%7B%20if%20(file.readyState%20===%204)%20%7B%20var%20tenkitmp%20=%20file.responseText;%20var%20tenkijson%20=%20tenkitmp;%20var%20tenki%20=%20JSON.parse(tenkijson);%20var%20tenkitext%20=%20tenki.description.text%20+%20%22%3Cbr%3E%22;%20var%20todaytenki%20=%20tenki.description.publicTimeFormatted%20+%20%22%E7%99%BA%E8%A1%A8%E3%80%82%3Cbr%3E%22;%20var%20main%20=%20tenkitext%20+%20todaytenki%20+%20%22%3Chr%3E%22;%20var%20todayimage%20=%20%22%3Cimg%20src=%5C%22%22%20+%20tenki.forecasts%5B0%5D.image.url%20+%20%22%5C%22%20width=%5C%22%22%20+%20tenki.forecasts%5B0%5D.image.width%20+%20%22%5C%22height=%5C%22%22%20+%20tenki.forecasts%5B%200%5D.image.height%20+%20%22%5C%22%20style=%5C%22vertical-align:middle;%5C%22%3E%22;%20var%20todaytenki%20=%20%22%3Cdiv%20style=%5C%22vertical-align:middle;%5C%22%3E%22%20+%20tenki.forecasts%5B%200%5D.telop%20+%20todayimage%20+%20%22%3C/div%3E%3Cbr%3E%22;%20var%20todaykousui%20=%20%22%E9%99%8D%E6%B0%B4%E7%A2%BA%E7%8E%87 %22%20+%20%220%E6%99%82~6%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B0%5D.chanceOfRain%20.T00_06%20+%20%22 6%E6%99%82~12%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B0%5D.chanceOfRain.T06_12%20+%20%22 12%E6%99%82~18%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B0%5D.chanceOfRain.T12_18%20+%20%22 18%E6%99%82~24%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B0%5D.chanceOfRain.T18_24%20+%20%22%3Cbr%3E%22;%20var%20main%20=%20main%20+%20%22%E4%BB%8A%E6%97%A5%EF%BC%9A%3Cbr%3E%22%20+%20todaytenki%20+%20todaykousui%20+%20%22%3Chr%3E%22;%20var%20todayimage%20=%20%22%3Cimg%20src=%5C%22%22%20+%20tenki.forecasts%5B1%5D.image.url%20+%20%22%5C%22%20width=%5C%22%22%20+%20tenki.forecasts%5B1%5D.image.width%20+%20%22%5C%22height=%5C%22%22%20+%20tenki.forecasts%5B%201%5D.image.height%20+%20%22%5C%22%20style=%5C%22vertical-align:middle;%5C%22%3E%22;%20var%20todaytenki%20=%20%22%3Cdiv%20style=%5C%22vertical-align:middle;%5C%22%3E%22%20+%20tenki.forecasts%5B%201%5D.telop%20+%20todayimage%20+%20%22%3C/div%3E%3Cbr%3E%22;%20var%20todaykousui%20=%20%22%3Cdiv%20style=margin-bottom:30px;%3E%E9%99%8D%E6%B0%B4%E7%A2%BA%E7%8E%87 %22%20+%20%220%E6%99%82~6%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B1%5D.chanceOfRain.T00_06%20+%20%22 6%E6%99%82~12%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B%201%5D.chanceOfRain.T06_12%20+%20%22 12%E6%99%82~18%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B1%5D.chanceOfRain%20.T12_18%20+%20%22 18%E6%99%82~24%E6%99%82%EF%BC%9A%22%20+%20tenki.forecasts%5B1%5D.chanceOfRain.T18_24%20+%20%22%3C/div%3E%3Cbr%3E%22;%20var%20main%20=%20main%20+%20%22%E6%98%8E%E6%97%A5%EF%BC%9A%3Cbr%3E%22%20+%20todaytenki%20+%20todaykousui;%20document.getElementById(%22tenki_disp%22).style.LetterSpacing%20=%20%222em%22;%20document.getElementById(%22tenki_disp%22).style.textAlign%20=%20%22center%22;%20document.getElementById(%22tenki_disp%22).innerHTML%20=%20main;%20document.getElementById(%22kidou%22).style.display%20=%20%22none%22;%20%7D%20%7D%20%7D%20if%20(systemdisp)%20%7B%20alert(%22%E3%81%99%E3%81%A7%E3%81%AB%E8%B5%B7%E5%8B%95%E6%B8%88%E3%81%BF%E3%81%A7%E3%81%99%E3%80%82%5Cn%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%95%E3%83%83%E3%82%BF%E3%83%BC%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22);%20%7D%20else%20%7B%20if%20(navigator.onLine)%20%7B%20var%20systemdisp%20=%20true;%20var%20s%20=%20document.createElement('div');%20systemdisp%20=%20true;%20s.innerHTML%20=%20%22%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%81%A7%E3%81%99...%22;%20setTimeout(function()%20%7B%20s.innerHTML%20=%20%22%E5%8F%96%E5%BE%97%E5%A4%B1%E6%95%97%E3%80%82%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22;%20%7D,%202000);%20s.id%20=%20%22kidou%22;%20document.querySelector(%22body%22).appendChild(s);%20start();%20%7D%20else%20%7B%20alert(%22%E5%8F%96%E5%BE%97%E5%A4%B1%E6%95%97%E3%80%82%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%88%E3%81%86%E3%81%A7%E3%81%99%E3%80%82%22);%20systemdisp%20=%20false;%20%7D%20%7D
    
    ...なっが。
    これ中学の頃から使ってるからいつか短くまとめたいなぁ...
  8. 音声プレーヤー
    javascript:%20var%20audio%20=%20new%20Audio();%20var%20file%20=%20document.createElement(%22input%22);%20document.body.appendChild(file);%20file.type=%22file%22;%20file.addEventListener(%22change%22,%20function(e)%7B%20audio.controls%20=%20true;%20document.body.appendChild(audio);%20%20%20%20%20%20%20%20%20const%20reader%20=%20new%20FileReader();%20%20%20%20%20%20%20%20%20reader.onload%20=%20()%20=%3E%20%7B%20%20%20%20%20%20%20%20%20%20%20audio.src%20=%20reader.result;%20%20%20%20%20%20%20%20%20%7D;%20%20%20%20%20%20%20%20%20reader.readAsDataURL(e.target.files%5B0%5D);%20%7D);
    
  9. 動画プレーヤー
    javascript:%20var%20video%20=%20%20document.createElement(%22video%22);%20var%20file%20=%20document.createElement(%22input%22);%20document.body.appendChild(file);%20file.type=%22file%22;%20file.addEventListener(%22change%22,%20function(e)%7B%20video.controls%20=%20true;%20document.body.appendChild(video);%20%20%20%20%20%20%20%20%20const%20reader%20=%20new%20FileReader();%20%20%20%20%20%20%20%20%20reader.onload%20=%20()%20=%3E%20%7B%20%20%20%20%20%20%20%20%20%20%20audio.src%20=%20reader.result;%20%20%20%20%20%20%20%20%20%7D;%20reader.readAsDataURL(e.target.files%5B0%5D);%20%7D);
    
    それぞれ音声と動画を再生するのみ。
  10. Geolocation APIのお遊び
    javascript:navigator.geolocation.getCurrentPosition((position)%20=%3E%20%7B%20location.href%20=%20%22https://google.com/search?q=%22%20+%20position.coords.latitude%20+%20%22,%22%20+%20position.coords.longitude;%20%7D);
    
    これも中学の頃作って持ち越した

以上。
これを使って作っていく。

よく使うサービス

vscode.dev
これでほとんどは開発。
それをcloudfree(前XFREE)にコピペ。(XFREEがドメイン変えたからアクセスできるようになった)
もしくはGitHubと連携させてGitでアップロード。
ほんとはGitにこんな使い方をしたらダメだけど、しかたない。

cloudflare
ここでドメイン管理。
DNSの機能しか使っていない。
なまえcom使いたくないからこっちにした。
gmおっとっと全般に言えるけどダークパターン多すぎ。

GitHub
なぜブロックされないのか謎。
使えてるしいいや。

cloudfree
XFREE時代にユーザーに対していくつもの嫌がらせをしてきた。
今は立て直しているみたい。
ちょうどその頃にいたけどあの時は酷かったと思う。

そのほかにも善意で使わせていただいているWebサーバーがありますが、公開しないことにします。
著名サイトにリンクすると悪意を持った人が申し込むかもしれません。

おわりに

iPadの標準機能で形だけのGBスクール構想に打ち勝ちましょう!
そして、学生の方がもっと身近に参入できるようにしましょう!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?