- -pv
スレッドの閲覧状況:
現在、- がスレを見ています。
これまでに合計 - 表示されました。
※PC・スマホの表示回数をカウントしてます。
※24時間表示がないスレのPVはリセットされます。

open2chのソース

1名無しさん:2013/06/29(土)20:44:29 ID:hsE7T4CvD()
JavaScriptのソースがあったけど、よくわからん

ライブラリ
http://toro.open2ch.net/lib/jquery/jquery-1.7.2.min.js
http://ja.wikipedia.org/wiki/JQuery

お絵かき
http://toro.open2ch.net/lib/oekaki/sketch.js?1371375196

スペクトラム
http://toro.open2ch.net/lib/oekaki/spectrum/spectrum.js
2名無しさん :2013/06/29(土)21:07:54 ID:hsE7T4CvD()
ブックマークレットでopen2chを拡張できるみたい

ブックマークレット - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88
3名無しさん :2013/07/01(月)12:48:37 ID:ukT/HvmBn
http://toro.open2ch.net/lib/read.cgi.js
4名無しさん :2013/07/03(水)16:23:56 ID:h6prVVl5y
スクラッチパッドで実行すると、色が緑になる

$("#colorPicker").spectrum("set", 'rgb(0,255,0)');
5名無しさん :2013/07/04(木)18:44:51 ID:3BB3bsSyk
fillはパスを塗りつぶす関数
windowsのFloodFillとは違う
CanvasにはFloodFillにあたる関数は無いみたい

fill()-Canvasリファレンス
http://www.htmq.com/canvas/fill.shtml
6名無しさん :2013/07/05(金)16:00:20 ID:K9GORSVaS
これだけで色を変えられた
setPaletColor('rgb(255, 0, 0)');

JavaScriptのスコープが良く分からん
ファイル単位って考え方が無いみたいだ

http://img.open2ch.net/p/tech-1372506269-6.png
7名無しさん :2013/07/05(金)17:13:34 ID:K9GORSVaS
ペンサイズも変わる
太さ:? のところは変わらないが
$('#sketch').sketch("size", 10);
8名無しさん :2013/07/05(金)18:44:39 ID:K9GORSVaS
塗るときの色は変わらなかった
http://img.open2ch.net/p/tech-1372506269-8.png
9名無しさん :2013/07/05(金)18:48:00 ID:K9GORSVaS
aキーでスポイト機能。 ただし、塗るときの色が変えられない。 あと、Ctrl+Rで戻せなくなる

function RGB(r, g, b) {return 'rgb(' + r + ',' + g + ',' + b + ')';}

var MouseX = 0;
var MouseY = 0;
document.getElementById('sketch').addEventListener("mousemove", MouseMoveFunc);
document.addEventListener("keydown", KeyDownFunc);

function MouseMoveFunc(e){
var rect = e.target.getBoundingClientRect();
MouseX = e.clientX - rect.left;
MouseY = e.clientY - rect.top;
};

function KeyDownFunc(e) {
if (e.keyCode==65) { // a
var canvas = document.getElementById('sketch');
var ctx = canvas.getContext('2d');
var img = ctx.getImageData(MouseX, MouseY, 1, 1);
setPaletColor(RGB(img.data[0], img.data[1], img.data[2]));
}
};
10名無しさん :2013/07/05(金)19:01:02 ID:K9GORSVaS
これで 描画色とパレットの色変更の両方できた
$('#sketch').sketch("color", RGB(img.data[0], img.data[1], img.data[2]));
11名無しさん :2013/07/05(金)19:07:14 ID:K9GORSVaS
と思ったら、やっぱりこっちも必要だ
setPaletColor(c);

大文字小文字を区別するのはやっかいだ
12名無しさん :2013/07/06(土)14:16:55 ID:PHQQOH9E4
"sketch.js" - Google 検索
https://www.google.co.jp/search?q=%22sketch.js%22

jQueryのプラグイン
13名無しさん :2013/07/06(土)14:24:03 ID:PHQQOH9E4
ソースとイメージ付き
A canvas globalCompositeOperation example
https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html

"Erasing" in html5 canvas - Stack Overflow
http://stackoverflow.com/questions/3328906/erasing-in-html5-canvas
context.globalCompositeOperation = "destination-out";
context.strokeStyle = "rgba(0,0,0,1)";
14名無しさん :2013/07/06(土)14:36:02 ID:PHQQOH9E4
loadイベントはスクラッチパッドからの実行では発生しない。
既に読み込まれた後だからだろうか
keydownは大丈夫

var Loaded = function() { document.title = new Date(); };
window.addEventListener("load", Loaded, false);

var KeyDown = function() { document.title = new Date(); };
window.addEventListener("keydown", KeyDown, false);
15名無しさん :2013/07/06(土)14:54:48 ID:PHQQOH9E4
FireFox22だと、このコードだけでマウスを動かすたびにHDDにアクセスする
HTMLが空だとそんなことは無い

var MouseMove = function(e) {};
window.addEventListener("mousemove", MouseMove, false);
16名無しさん :2013/07/06(土)16:34:54 ID:PHQQOH9E4
これをスクラッチパッドにコピペして実行すると、FireFoxでも消しゴムで消せるようになりました

$.sketch.tools.eraser = {
onEvent: function(e) {
return $.sketch.tools.marker.onEvent.call(this, e);
},
draw: function(action) {
var oldcomposite;
oldcomposite = this.context.globalCompositeOperation;
this.context.globalCompositeOperation = "destination-out";
action.strokeStyle = "rgba(0,0,0,1)";
$.sketch.tools.marker.draw.call(this, action);
return this.context.globalCompositeOperation = oldcomposite;
}
};
17名無しさん :2013/07/06(土)16:58:42 ID:PHQQOH9E4
消える?
18名無しさん :2013/07/07(日)17:41:54 ID:4lJL8oD4F
透明になるって意味ですよ
http://img.open2ch.net/p/tech-1372506269-18.png
19名無しさん :2013/07/07(日)18:15:00 ID:4lJL8oD4F
これ追加して背景色変えて、>18の「とうめい」の文字が透明になっていることを確認できます

function randBetween(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};

$('body').attr('bgcolor', '#ffff' + parseInt(randBetween(0, 255), 16));
20名無しさん :2013/07/08(月)13:12:04 ID:QFmubFkGT
FireFoxのスクラッチパッドは
shift + F4 表示
ctrl + R 実行
ctrl + shift + R ブラウザを再読み込みして実行
ctrl + shift + K WEBコンソール(JavaScriptのエラーメッセージが見られる)
21名無しさん :2013/07/08(月)16:26:01 ID:QFmubFkGT
太さの一覧変更

$(document).ready(function() {
$('#psize').html(
'<option>1</option>' +
'<option>2</option>' +
'<option>3</option>' +
'<option>5</option>' +
'<option>10</option>' +
'<option>20</option>' +
'<option>35</option>' +
'<option>50</option>' +
'<option>100</option>')
});

http://img.open2ch.net/p/tech-1372506269-21.png
22名無しさん :2013/07/09(火)15:22:18 ID:RI+Vbaej1
うわ、スクラッチパッドは日本語が含まれていると読み込めないのか??
23名無しさん :2013/07/14(日)14:01:47 ID:ziiBdlcxR
これで背景に書き込めた。(消えない)
でもアップロードできない

$(document).ready(function() {
$('#sketch').sketch().setBaseImageURL('http://upload.wikimedia.org/wikipedia/commons/thumb/5/5d/European_shorthair_procumbent_Quincy.jpg/320px-European_shorthair_procumbent_Quincy.jpg');
});
24名無しさん :2013/07/14(日)15:56:54 ID:ziiBdlcxR
Base64を img.src にぶち込んで、消しゴムツールに変えてクリックすると、
画像が描かれ、かつマウスカーソルが外に出ても消えない。
消しゴムツールは使えなくなるけど。

$.sketch.tools.eraser = {
onEvent: function(e) {
return jQuery.sketch.tools.marker.onEvent.call(this, e);
},
draw: function(action) {
var canvas = document.getElementById('sketch');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = data;
ctx.drawImage(img, 0, 0);
}
};

[JavaScript] dataスキームURI生成(画像データのBase64変換)
http://www.kawa.net/works/js/data-scheme/base64.html
25名無しさん :2013/07/15(月)14:36:17 ID:/8N3DGFrG
お絵かきソフトに見えて実はベクトルデータだ

startPainting で色、ペンサイズ、ツールを覚えておいて、
stopPainting で actions.push する

undo は最後の actions を削除
26名無しさん :2013/07/15(月)14:49:36 ID:/8N3DGFrG
redraw でコラボ画像を描画してから、
全actionを実行して、
painting ならそれも実行してる

APIが用意されていない塗りつぶし機能も入れることが出来るけど、
ピクセル操作はべらぼうに遅くなりそうだ。

色マスク機能は action 毎にマスクする色を覚えておいて、
別のcanvasにdrawして、#sketchと1ピクセルずつ合成すれば出来そうだ
27名無しさん :2013/07/15(月)14:58:41 ID:/8N3DGFrG
>>24で絵が消えないのは、actionsの中で描画しているからだ
ドメインも無いので insecureエラーも出ないのだと思う

drawImageでURLもコピーしてドメインチェックしてるのだろうか
28名無しさん :2013/07/15(月)16:26:51 ID:/8N3DGFrG
黒以外へ描画、ただしものすごく遅い。

var buff;

$.sketch.tools.marker = {
onEvent: function(e) {
switch (e.type) {
case 'mousedown':
case 'touchstart':
this.startPainting();
break;
case 'mouseup':
case 'mouseout':
case 'mouseleave':
case 'touchend':
case 'touchcancel':
this.stopPainting();
}
if (this.painting) {
this.action.events.push({
x: e.pageX - this.canvas.offset().left,
y: e.pageY - this.canvas.offset().top,
event: e.type
});
return this.redraw();
}
},
29名無しさん :2013/07/15(月)16:27:20 ID:/8N3DGFrG
draw: function(action) {
if (buff == undefined) {
buff = document.createElement('canvas');
buff.width = 490;
buff.height = 200;
}

var buffctx = buff.getContext('2d');
buffctx.clearRect(0, 0, buff.width, buff.height);

var event, _i, _len, _ref;
buffctx.lineJoin = "round";
buffctx.lineCap = "round";
buffctx.beginPath();
buffctx.moveTo(action.events[0].x, action.events[0].y);
_ref = action.events;
var minLeft = action.events[0].x;
var minTop = action.events[0].y;
var maxRight = action.events[0].x;
var maxBottom = action.events[0].y;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
event = _ref[_i];
buffctx.lineTo(event.x, event.y);
if (event.x < minLeft) {
minLeft = event.x;
} else if (event.x > maxRight) {
maxRight = event.x;
}
if (event.y < minTop) {
minTop = event.y;
} else if (event.y > maxBottom) {
maxBottom = event.y;
}
}
buffctx.strokeStyle = action.color;
buffctx.lineWidth = action.size;
buffctx.stroke();
30名無しさん :2013/07/15(月)16:27:34 ID:/8N3DGFrG
var s = buffctx.getImageData(0, 0, buff.width, buff.height);
var d = this.context.getImageData(0, 0, buff.width, buff.height);
var maskr = 0;
var maskg = 0;
var maskb = 0;
var r = Math.floor((action.size + 1) / 2);
var left = Math.floor(Math.max(minLeft - r), 0);
var top = Math.floor(Math.max(minTop - r), 0);
var right = Math.floor(Math.min(maxRight + r), buff.width);
var bottom = Math.floor(Math.min(maxBottom + r), buff.height);
var p = 0;
for (var y = top; y < bottom; y++) {
p = (y * buff.width + left) * 4;
for (var x = left; x < right; x++) {
if (s.data[p+3] != 0) {
if ((d.data[p] != maskr) || (d.data[p+1] != maskg) || (d.data[p+2] != maskb)) {
d.data[p] = s.data[p];
d.data[p+1] = s.data[p+1];
d.data[p+2] = s.data[p+2];
d.data[p+3] = s.data[p+3];
}
}
p += 4;
}
}
this.context.putImageData(d, 0, 0, left, top, right - left, bottom - top);
}
};
31名無しさん :2013/07/15(月)16:31:25 ID:/8N3DGFrG
てっきり 0, 0, では無くて、left, top かと思ったら違うんだな
d と this.contextのズレと考えればいいのかな?
this.context.putImageData(d, left, top, left, top, right - left, bottom - top);

HTML canvas putImageData() Method
http://www.w3schools.com/tags/canvas_putimagedata.asp
32名無しさん :2013/07/15(月)17:22:46 ID:/8N3DGFrG
何とかglobalCompositeOperationを使って出来ないか調べ中
保護する色を選んだときにマスク作成で出来そうな
33名無しさん :2013/07/15(月)18:23:17 ID:/8N3DGFrG
難しく考えずに、
保護色の部分以外をalpha=0 にしたcanvasを作って、
描画するとき、そのcanvasを上から重ねればいけるかも!
34名無しさん :2013/07/15(月)19:08:07 ID:/8N3DGFrG
黒の保護は出来た。
draw の最後で this.context.drawImage(mask, 0, 0); で重ねればいける。
キーボードでrebuildMaskを呼び出せばいいと思う。

var w = 490;
var h = 200;
var mask;
function rebuildMask(maskColor) {
if (mask == undefined) {
mask = document.createElement('canvas');
mask.width = w;
mask.height = h;
}
var maskr = 0;
var maskg = 0;
var maskb = 0;
var maskctx = mask.getContext('2d');
maskctx.fillStyle = 'rgba(0,0,0,0)';
maskctx.clearRect(0, 0, w, h);
var ctx = document.getElementById('sketch').getContext('2d');
var d = ctx.getImageData(0, 0, w, h);
var s = maskctx.getImageData(0, 0, w, h);
n = 0;
for (var i = 0; i < w * h * 4; i+=4) {
if ((d.data[i] == maskr) && (d.data[i+1] == maskg) && (d.data[i+2] == maskb)) {
s.data[i] = maskr;
s.data[i+1] = maskg;
s.data[i+2] = maskb;
s.data[i+3] = d.data[i+3];
}
}
maskctx.putImageData(s, 0, 0);
}
35名無しさん :2013/07/16(火)11:35:50 ID:LFv3R+l8b
sketch.jsの説明があった

sketch.coffee
http://intridea.github.io/sketch.js/docs/sketch.html
36名無しさん :2013/07/16(火)11:47:12 ID:LFv3R+l8b
Category:Public domain - Wikimedia Commons
http://commons.wikimedia.org/wiki/Category:Public_domain
37名無しさん :2013/07/16(火)13:02:16 ID:LFv3R+l8b
clip()は色マスクには使えない
座標で囲んだ部分をクリップするだけ。 直線を描いたところはクリップできない

var c=document.getElementById("sketch");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.moveTo(50,20);
ctx.lineTo(200,120);
ctx.lineTo(200,50);
ctx.closePath();
ctx.lineWidth="19";
ctx.stroke();
ctx.clip();
ctx.fillStyle="red";
ctx.fillRect(0,0,150,100);
http://img.open2ch.net/p/tech-1372506269-37.png
38名無しさん :2013/07/16(火)13:18:55 ID:LFv3R+l8b
色の設定と取得
$('#sketch').sketch('color','#f00');
document.title = $('#sketch').sketch('color');

$('#sketch') がオブジェクトを返すにしても、sketchなんて関数は知らないだろ!
と思ってしまう。
39名無しさん :2013/07/16(火)14:19:50 ID:LFv3R+l8b
マルチレイヤー対応

JavaScript だけで、お絵描きできる Sketch.js の調査 _ Papasan's Home
http://papasan.mydns.jp/misc-folder/sketch.js
40名無しさん :2013/07/16(火)15:33:21 ID:LFv3R+l8b
見た目コンボボックス形式にしてみる

$('#idTools').remove();
$('#psize').after('<select id=idTools>' +
'<option>Pen(Z)</option>' +
'<option>Erase(X)</option>' +
'<option>Spoit(C)</option></select>');
41名無しさん :2013/07/16(火)16:09:58 ID:LFv3R+l8b
既存のツールラジオボタンとイメージを消す
$('#kaku').remove();
$('#kesu').remove();
$('#spoit').remove();
$("label[for='kaku']").remove();
$("label[for='kesu']").remove();
$("label[for='spoit']").remove();
42名無しさん :2013/07/16(火)16:53:49 ID:LFv3R+l8b
sketch.js全体をスクラッチパッドにコピペして実行できた
43名無しさん :2013/07/16(火)17:00:11 ID:LFv3R+l8b
それでも Sketch.prototype.startPainting 等の prototype は呼ばれない
44名無しさん :2013/07/16(火)17:34:19 ID:LFv3R+l8b
sketchデータを削除しないと有効にならないみたいだ
this.removeData('sketch');
どこで、どうやって削除すればいいのだろう
45名無しさん :2013/07/17(水)08:56:58 ID:8f2dl4SO0
sketch.jsの (function($) {...})(jQuery); の意味。

関数を()で囲み、(function($){...})
()をつけると、 (function($){...})()
関数の呼び出しになる(JavaScriptの仕様みたい)。

(function($){...})(jQuery) だと、jQuery を引数に、無名関数 function($){...} を呼び出す。
関数内では、$がjQueryを指すようになる。

↓こういうことなんだけど、
function hoge($) {...}
hoge(jQuery);

hogeが外部から呼ばれるのを避けるために無名関数を使うと
(function($) {...})(jQuery); みたいな書き方になる。

(function($) {})(jQuery);って何?って思ったからいろいろ試してみた記録 - お勉強orz日和
http://d.hatena.ne.jp/initialize/20090526/p1
46名無しさん :2013/07/17(水)09:58:03 ID:8f2dl4SO0
key = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];

= より <= の方が優先順位が高いので、
if 2 <= arguments.length then
args := __slice.call(arguments, 1)
else
args := [];
key := arguments[0];
って意味だ。 順番や arguments.length==0の時は知らない

call ってこれみたいだけど、よく分からない
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/call
47名無しさん :2013/07/17(水)10:31:34 ID:8f2dl4SO0
$.fn.sketch = function() { の直前で削除して、
$('#sketch').removeData('sketch');
$.fn.sketch = function() {

$.sketch ={ の直前で作成したらうまくいった。
$('#sketch').sketch();
$.sketch = {
tools: {}
};
48名無しさん :2013/07/17(水)10:35:43 ID:8f2dl4SO0
クラス Sketchの定義の後ろで呼び出さないとダメなのか
Sketch = (function() {
})();
// ここ
49名無しさん :2013/07/17(水)10:49:37 ID:8f2dl4SO0
facebookログインボタンとイイ・イクナイボタンの消去

$('.fb_box').remove();
$('.box').remove();
50名無しさん :2013/07/17(水)11:09:45 ID:8f2dl4SO0
既存のコラボクリックを無効にして、
$(".opic").unbind('click');

新しいコラボクリックを定義
$(".opic").click(function(){
document.title = 'new korabo click';
});
51名無しさん :2013/07/17(水)11:24:55 ID:8f2dl4SO0
新しいコラボクリック用定義は
>>47の $('#sketch').sketch(); の後におけばいける
52名無しさん :2013/07/17(水)14:41:31 ID:8f2dl4SO0
L2: レイヤー2 上(手前)
L1: レイヤー1 下(奥)

L2とL1の統合を考えると、
L2での消しゴムは本来L2のみに適用されるべき。
しかし、 L1.actionsの後にL2.actionsを実行するような統合だと、
L1に描いたものが消されるようになる。

レイヤーの統合は不可能っぽい
53名無しさん :2013/07/18(木)16:58:30 ID:Iv1hVONEI
「public domain cat」の検索結果 - Wikipedia
http://ja.wikipedia.org/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2&search=public%20domain%20cat&fulltext=%E6%A4%9C%E7%B4%A2&profile=images&redirs=1
54名無しさん :2013/07/20(土)08:59:29 ID:r5bCI0hBf
javascriptで動作する将棋棋譜ビューワを作った - ベイエリア情報局
http://blog.bz2.jp/archives/2011/04/javascript-6.html

将棋の棋譜でーたべーす|世界最大の将棋の棋譜データベース
http://wiki.optus.nu/shogi/index.php?cmd=kif&cmds=display6&kid=77740
55名無しさん :2013/07/21(日)10:31:23 ID:XOka+lzRY
短くするとこう
var Sketch; //#a これが $.fn.sketch = function() {より先なのが不明。

Sketch = (function() { // 無名関数を実行して Sketch#a に代入
function Sketch(el, opts) { // コンストラクタ
}
Sketch.prototype.setBgcolor = function(color) {}
Sketch.prototype.clear = function(format) {}
return Sketch; // Sketch#a を返す。 意味あるのか?
})();
56名無しさん :2013/07/21(日)15:05:36 ID:XOka+lzRY
return $.sketch.tools[this.action.tool].draw.call(sketch, this.action);
の call の意味

関数もオブジェクトなので、メンバ関数を持つ。 callはその一つ。
sketch を this 、 第一引数を this.action にして、 関数 draw を呼び出す。
57名無しさん :2013/07/21(日)15:12:28 ID:TCYL09bBL
おれは全部知ってるけどな
58名無しさん :2013/07/23(火)15:51:50 ID:aLiEtMa2W

http://img.open2ch.net/p/tech-1372506269-58.png
59名無しさん :2013/08/24(土)14:53:51 ID:0rGR1f/zD
サンプルどうりの日本標準時のが出た
Sat Feb 14 2009 08:31:30 GMT+0900

var d = new Date();
d.setTime(1234567890 * 1000);
document.title = d;

UNIX時間 - Wikipedia
http://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93
>2009-02-14T08:31:30
60名無しさん :2013/08/24(土)14:55:56 ID:0rGR1f/zD
このスレッドのキー 1372506269 でやると、ちゃんと >1 の書き込み時間になった

Sat Jun 29 2013 20:44:29 GMT+0900

http://toro.open2ch.net/test/read.cgi/tech/1372506269/l10
1 :名無しさん :2013/06/29(土)20:44:29 ID:hsE7T4CvD
61名無しさん :2013/08/24(土)15:09:25 ID:0rGR1f/zD
2013年6月29日(土) 20:44:29

var Day = '日月火水木金土';
var d = new Date();
d.setTime(1372506269 * 1000);
document.title = d.toLocaleDateString() + '(' + Day[d.getDay()] + ') ' + d.toLocaleTimeString();
62片山博文MZコスモ◆T6xkBnTXz7B0 :2013/08/26(月)17:28:35 ID:7VQ3+YjdM
さっそくバグ発見!!!

http://toro.open2ch.net/test/read.cgi/tech/1377472860
にアクセスすると「datが存在しません。削除されたかURL間違ってますよ。」と
表示されるが、
http://toro.open2ch.net/test/read.cgi/tech/1377472860/
にアクセスすると成功する。
63片山博文MZコスモ◆T6xkBnTXz7B0 :2013/08/29(木)13:38:29 ID:Jkxw9NSrY
携帯やスマホ用もほしい。
64名無しさん :2013/08/29(木)16:11:00 ID:xdHZYlO05
たしかに2chは / が無くても開けるな
65名無しさん :2013/09/27(金)21:26:43 ID:9SLI0f0Gs
var d=document;
var n=d.getElementsByTagName('dt');
document.title = n.length;

alert(n[0].innerHTML);
//1 :<font color="darkgreen"><b>名無しさん</b></font> :2013/06/29(土)20:44:29 ID:<a class="id" href="?id=hsE7T4CvD">hsE7T4CvD</a>

alert(n[0].textContent);
//1 :名無しさん :2013/06/29(土)20:44:29 ID:hsE7T4CvD
66名無しさん :2013/09/27(金)21:36:32 ID:9SLI0f0Gs
var d=document;
var n=d.getElementsByTagName('dt');
var s=n.length + ' kakiko\n';
for (var i=0; i<n.length; i++) {
s = s + n[i].textContent + '\n';
}
alert(s);
67名無しさん :2013/09/27(金)21:42:31 ID:9SLI0f0Gs
今気づいたんだが、板表示の時は、書き込み番号の右に「名前:」とあるが、
全部表示や最新50表示のときのスレ表示だと、「名前」が付かないんだな。
本家も同じ。

http://toro.open2ch.net/tech/
1 名前:名無しさん 2013/06/29(土)20:44:29 ID:hsE7T4CvD

http://toro.open2ch.net/test/read.cgi/tech/1372506269/l50
1 :名無しさん :2013/06/29(土)20:44:29 ID:hsE7T4CvD
68名無しさん :2013/09/27(金)22:21:16 ID:GZV/jE4A9
名前の前後に記号(全角のコロン)があるのがいい
69名無しさん :2013/09/27(金)22:23:55 ID:GZV/jE4A9
68 名前:名無しさん :2013/09/27(金)22:21:16 ID:GZV/jE4A9
                      ↑              
                     半角空白をいれてほしい
互換性を重視してほしい。守ってほしい。
なんで")"を") "に置換しなければならないのか!
単純にやると他の行に影響するし、困ったことだ
70名前:に;全角コロン: :2013/09/27(金)22:35:38 ID:9SLI0f0Gs
板表示の時に、>>1の名前に:が付かないんだな。
openも一緒

http://kohada.2ch.net/nntp/

板表示
1 名前:名無しということにしたいのですね 2013/08/27(火) 00:29:13.47
2 名前:名無しということにしたいのですね :2013/09/01(日) 21:34:01.87

最新50表示
1 :名無しということにしたいのですね:2013/08/27(火) 00:29:13.47
2 :名無しということにしたいのですね:2013/09/01(日) 21:34:01.87
71名無しさん :2013/10/18(金)15:15:55 ID:yGAVbKYAZ
同一ドメインならこれで読めた

function loadFile(s) {
var x = new XMLHttpRequest();
x.open('GET', s, false);
x.send(null);
return x.responseText;
}
document.title = loadFile('subject.txt');
72名無しさん :2013/10/19(土)04:40:28 ID:7jfzvoV3l
document.location='http://toro.open2ch.net/tech/';
でページが変わってしまうな

loadFile('http://hayabusa.open2ch.net/news4vip/subject.txt');
のように、違うドメインのファイルを読み込もうとすると、
send.(null)で Exception: Failure が出る。
73名無しさん :2013/10/19(土)05:02:47 ID:7jfzvoV3l
別ドメイン ファイル 読み込み javascript - Google 検索
http://www.google.co.jp/search?q=%E5%88%A5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF+javascript

クロスドメインというらしい
JavaScriptだけでは無理みたい

高速に切り替えながら、取得するしかないのかな
74名無しさん :2013/10/19(土)05:38:24 ID:7jfzvoV3l
高速切り替えはダメだ。
読み込みを待ってくれない。
75名無しさん :2013/10/19(土)05:58:30 ID:7jfzvoV3l
2chはsjisだからか、そのままでは使えない
76名無しさん :2013/10/19(土)06:11:28 ID:7jfzvoV3l
標準で変換用ライブラリは付いておらず、テーブルを使って変換するらしい
77名無しさん :2013/10/19(土)06:17:29 ID:7jfzvoV3l
openもsjisだ
なんで読み込めるのだろう?
78名無しさん :2013/10/19(土)07:46:59 ID:7jfzvoV3l
alertで待とうと思ったけど、
Exception: prompt aborted by user
@425
エラーが出た

alert(document.location);
document.location='http://toro.open2ch.net/tech/subject.txt';
alert(document.location);
document.location='http://engawa.open2ch.net/comicnews/subject.txt';
alert(document.location);
79名無しさん :2013/10/20(日)05:27:49 ID:f4Jbhve+N
切り替えたら JavaScript もとまった

var boards = ['http://anago.open2ch.net/wildplus/', 'http://ikura.open2ch.net/nandemo/'];
var index = 0;
var timer = setInterval("onTimer()", 2000);
function onTimer() {
document.location = boards[index];
index++;
if (index >= boards.length) { clearInterval(timer); alert(index); }
};
80名無しさん :2013/10/20(日)05:40:21 ID:f4Jbhve+N
frameなら大丈夫だった。 clearIntervalで直ぐに止まらないんだな。

var boards = ['http://anago.open2ch.net/wildplus/', 'http://ikura.open2ch.net/nandemo/'];
var index = 0;
var timer = setInterval("onTimer()", 2000);
function onTimer() {
if (index < boards.length) {
frames[0].location = boards[index] + 'subject.txt';
index++;
} else {
timer = clearInterval(timer);
}
};
81名無しさん :2013/11/04(月)16:36:58 ID:R4//9Yp0/
■レス取得

var d=document;
var dts=d.getElementsByTagName('dt');
var dds=d.getElementsByTagName('dd');
function getRes(num) {
 for (var i=0;i<dts.length;i++) {
  var n=dts[i].childNodes[0].textContent.match(/\d+/);
  if (n==num) {
   return dds[i].innerHTML.replace(/<br>/gi, '\n');
  }
 }
}
82名無しさん :2013/11/04(月)16:44:07 ID:R4//9Yp0/
あ、<a> タグは考慮してない
83名無しさん :2013/11/04(月)16:48:57 ID:R4//9Yp0/
■一番上にtextを書き込んだTEXTAREAを挿入する
挿入方法が分からないので、ここでは置き換えています

function textout(text) {
var e=document.getElementById('mytextarea');
if (e==undefined) {
 e=document.createElement('TEXTAREA');
 e.id='mytextarea';
 e.cols=80;
 e.rows=10;
 var b=document.getElementsByTagName('div');
 var p=b[0].parentNode;
 p.replaceChild(e,b[0]);
}
e.innerHTML=text;
}
84名無しさん :2013/11/05(火)06:56:01 ID:YB4fr8pHv
■一番上に一固定のtextareaを作成する

function getMyTextArea() {
 var e=document.getElementById('MyTextArea');
 if (e==undefined) {
  e=document.createElement('textarea');
  e.id='MyTextArea';
  e.style='position:fixed;left:0;top:0;width:100%;height:25%';
  document.body.appendChild(e);
 }
 return e;
}

function setText(text) {
 getMyTextArea().innerHTML=text;
}

function addText(text) {
 var e=getMyTextArea();
 e.innerHTML = e.innerHTML+text+'\n';
}

addText('test test');
85名無しさん :2013/11/05(火)08:27:03 ID:YB4fr8pHv
■二つの日付の差

var d1 = new Date('2013/10/20 16:10:00');
var d2 = new Date('2013/11/04 7:36:50');
var sec = Math.floor((d2.getTime() - d1.getTime()) / 1000);
var min = Math.floor(sec / 60);
var hour = Math.floor(min / 60);
var day = Math.floor(hour / 24);
sec = sec - min * 60;
min = min - hour * 60;
hour = hour - day * 24;
document.title = day+'日'+hour+'時間'+min+'分'+sec+'秒';
86名無しさん :2013/11/06(水)10:43:39 ID:VjXd8KQI+
■二つのカキコ数データから差を求める(1/2)
新しいデータを MESSAGE にコピペ、古いデータを範囲選択して、結果は MESSAGE に上書き

var result = '';
var oldRes = document.getSelection().toString().trim();
var newRes = document.getElementById('MESSAGE').value.trim();
function deleteBraces(s){return s.replace(/\(\/?[^\)]*\)/gi, '');}
oldRes = deleteBraces(oldRes);
newRes = deleteBraces(newRes);
var oldLines = oldRes.split('\n');
var newLines = newRes.split('\n');
var oldDate = new Date(oldLines[0]);
var newDate = new Date(newLines[0]);
var oldCounts = new Array();
var oldTitles = new Array();
var newCounts = new Array();
var newTitles = new Array();

function diffDate(oldDate, newDate) {
var sec = Math.floor((newDate.getTime() - oldDate.getTime()) / 1000);
var min = Math.floor(sec / 60);
var hour = Math.floor(min / 60);
var day = Math.floor(hour / 24);
sec = sec - min * 60;
min = min - hour * 60;
hour = hour - day * 24;
return day+'日'+hour+'時間'+min+'分'+sec+'秒';
}
87名無しさん :2013/11/06(水)10:44:12 ID:VjXd8KQI+
■二つのカキコ数データから差を求める(2/2)

function toArray(lines, counts, titles) {
 for (var i = 1; i < lines.length; i++) {
  var a = lines[i].trim().split(' ');
  counts.push(parseInt(a[0], 10));
  titles.push(a[1].trim());
 }
}
toArray(oldLines, oldCounts, oldTitles);
toArray(newLines, newCounts, newTitles);

result = newLines[0] + '(+' + diffDate(oldDate, newDate) + ')\n';
for (var i = 0; i < newTitles.length; i++) {
 var x = oldTitles.indexOf(newTitles[i]);
 if (x >= 0) {
  result = result + newCounts[i] + ' ' + newTitles[i] + '(+' + (newCounts[i] - oldCounts[x]) + ')\n';
 } else {
  result = result + newCounts[i] + ' ' + newTitles[i] + '(+?)\n';
 }
}

document.title = oldLines[0] + ' - ' + newLines[0];
var e = document.getElementById('MESSAGE');
e.value = result;
e.style.height = '75%';
88名無しさん :2013/11/14(木)18:05:29 ID:5W3WEz+Se
なんでたかがbbsごときでこんな手間取ってんの
jsゴミすぎる
89名無しさん :2013/11/15(金)13:51:17 ID:l8eEeMAZ1
function docLoaded() {
 var domain = gBrowser.contentWindow.location.hostname;
 var path = gBrowser.contentWindow.location.pathname;
 if (domain.slice(-'.open2ch.net'.length) == '.open2ch.net') {
  if (path.slice(0, '/test/'.length) == '/test/') {
   // スレ表示
   var e = gBrowser.contentDocument.getElementById('MESSAGE');
   if (e) {
    e.parentNode.style = 'width:100%;';
    e.style = 'width:100%;height:200;';
   }
  } else if (path.slice(-'/subback.html'.length) == '/subback.html') {
   // スレ一覧 subback表示
   // 左右反転文字をスレ一覧から除去
   var d = gBrowser.contentDocument;
   var a = d.getElementsByTagName('body');
   if (a) a[0].innerHTML = a[0].innerHTML.replace(/\u202E/g, '');

  } else {
   // 板表示
   var d = gBrowser.contentDocument;
   var a = d.getElementsByTagName('font');
   if (a && a.length > 2) a[2].innerHTML = a[2].innerHTML.replace(/\u202E/g, '');

   // 新規スレッド作成 MESSAGEは沢山あるので最後のを指定
   var e = gBrowser.contentDocument.getElementsByName('MESSAGE');
   if (e) e[e.length - 1].style = 'width:100%;height:300;';
  }
 }
}
90名無しさん :2013/11/15(金)13:53:24 ID:l8eEeMAZ1
function windowLoaded() {
window.removeEventListener('load', windowLoaded);
gBrowser.addEventListener('load', docLoaded, true);
};
window.addEventListener('load', windowLoaded, false);

これで左右反転は解消される
ついでに書き込む場所大きくした
91名無しさん :2013/11/15(金)16:25:16 ID:s+Xq+3LM/
>>24みたいに、いちいち消しゴムツールに変える必要がなくなりました
Firefoxのスクラッチパッドで、img.src に base64 ぶちこんで、ctrl+r で書き込みます

var img = new Image();
img.src = '';
var s = $('#sketch').sketch();
s.el.width = img.width;
s.el.height = img.height;
s.baseImageURL = 'http://toro.open2ch.net/image/logo.gif'; // dummy
s.baseImageCache = img;
s.context.drawImage(img, 0, 0);
92名無しさん :2013/11/15(金)16:28:57 ID:s+Xq+3LM/
アドオンからやればセキュリティーエラーを回避して、
ローカルファイルを描画できるのかもしれないのだけれども、
s.baseImageURL と s.baseImageCache の設定方法が分からない
93名無しさん :2013/11/20(水)12:37:30 ID:QutF0XZw5
質問

投稿したときは投稿時刻が
00:00:00
だったのに
今(10日後)見たら
00:01:11
になっていたんですが
こんなことってあるんですか?
9493 :2013/11/21(木)00:34:52 ID:U8KcYSVEz
すみません思い違いでした
>>93は取り消します
95名無しさん :2014/01/12(日)09:06:54 ID:KzTBSWU62
お絵かき画像一覧を下に表示

document.body.appendChild(document.createElement("br"));
var imgs = document.getElementsByTagName("img");
for (let i = 0; i < imgs.length - 1; i++) {
 if (imgs[i].getAttribute("class") == "opic") {
  let e = document.createElement("img");
  e.src = imgs[i].src;
  document.body.appendChild(e);
 }
}
96名無しさん :2014/02/26(水)01:06:00 ID:U4Nw44eOe
document.body.appendChild(document.createElement("br"));
var imgs = document.getElementsByTagName("img");
for (let i = 0; i < imgs.length - 1; i++) {
 if (imgs[i].getAttribute("class") == "opic") {
  let e = document.createElement("img");
  e.src = imgs[i].src;
  document.body.appendChild(e);
 }
}

http://img.open2ch.net/p/tech-1372506269-96.png
97名無しさん :2014/03/14(金)13:59:40 ID:XXvV7IArm
あげ
98名無しさん :2014/03/21(金)16:05:53 ID:VmVrfNAyR
アンカー先ポップアップ機能
http://open.open2ch.net/lib/common.v2.js?v3
99名無しさん :2014/03/22(土)13:46:23 ID:wbXLySWB3
一時保存
Firefox27では何も起きないのだが

http://open.open2ch.net/lib/read.cgi.v4.js?new.v2

 $("#saveButton").click(function(){
  if(isOekakiDone){
   var link = document.createElement('a');
   link.download = ["open2ch",new Date().getTime()].join("-") + ".png";
   link.href = $('#sketch').sketch().download("png");
   link.click();
  } else {
   alert("まだ何も描かれていないようだ。。");
  }
 });
100名無しさん :2014/03/28(金)11:36:06 ID:jItRFBuJl
ドラッグ&ドロップ-HTML5のAPI、および、関連仕様
http://www.htmq.com/dnd/
>href属性が指定されたa要素、および、src属性が指定されたimg要素は、
>デフォルトでドラッグ可となっています。 それ以外の要素は、デフォルトではドラッグ不可です。
101名無しさん :2014/03/28(金)11:46:32 ID:jItRFBuJl
デスクトップやエクスプローラーからファイルのD&Dで貼り付けは可能だった
icoファイルも貼り付けできた
102名無しさん :2014/03/28(金)12:02:42 ID:jItRFBuJl
imgのD&Dが分からん

このサンプルはファイル名のみ

連載:人気順に説明する初めてのHTML5開発:アドインなしで実現可能! ドラッグ&ドロップを使いこなそう (2/2) - @IT
http://www.atmarkit.co.jp/ait/articles/1109/13/news144_2.html

Drag & Drop Sample
http://www.atmarkit.co.jp/ait/files/20110913/dnd3.htm
103名無しさん :2014/03/28(金)12:11:06 ID:jItRFBuJl
document.title = event.dataTransfer.files[0];
はやっぱり undefined

document.title = event.dataTransfer.files;
はあるのだが
104名無しさん :2014/04/04(金)07:27:37 ID:AHRVhZouj
メニューから単純に改行を削除

BBS MENU for open2ch
http://toro.open2ch.net/menu/pc_menu.html

let e = document.getElementsByTagName("br");
for (let i = e.length - 1; i >= 0; i--) {
 e[i].remove();
}
105名無しさん :2014/04/04(金)07:49:18 ID:AHRVhZouj
カテゴリ「人気」の非表示

var b = document.getElementsByTagName("B");
function getCat(name) {
 for (var i = 0; i < b.length; i++) {
  if (b[i].innerHTML == name) return b[i];
 }
 return null;
}

var ninki = getCat("人気");
if (ninki) {
 var next = ninki.nextElementSibling;
 while (next && next.tagName.toUpperCase() != "B") {
  next.hidden = true
  next = next.nextElementSibling;
 }
 ninki.hidden = true;
}
106名無しさん :2014/04/16(水)23:43:36 ID:Xn091UJzX
open2chのjsを眺めるのはここでいいの?
107名無しさん :2014/04/23(水)06:46:38 ID:L8HmCTuv1
いいよ
108名無しさん :2014/04/23(水)06:49:47 ID:L8HmCTuv1
他は整形する必要がある

http://toro.open2ch.net/lib/kome/kome.v14.js?v62
http://toro.open2ch.net/lib/read.cgi.v20.js?v15
109名無しさん :2014/04/28(月)05:25:18 ID:eAfj7UOXv
http://toro.open2ch.net/lib/read.cgi.v21.js?v140425

POST時の応答
success:805:1398629871

GET時の応答
success<dt><a href=./805 class=id>805</a> :<font color=darkgreen><b>名無しさん</b></font></a> :2014/04/28(月)05:17:51 ID:<a class=id href=?id=7htL39H98>7htL39H98</a>
<dd> test<br></dt><br>8051398629871
110名無しさん :2014/04/28(月)05:37:12 ID:eAfj7UOXv
ajax使えとな

javascript - How do I capture response of form.submit - Stack Overflow
http://stackoverflow.com/questions/374644/how-do-i-capture-response-of-form-submit
111名無しさん :2014/04/28(月)06:40:24 ID:eAfj7UOXv
POST時の応答は、XMLHttpRequest で分かるかもしれんが、
onsubmit ではわからにゃい
112名無しさん :2014/04/28(月)07:20:57 ID:eAfj7UOXv
指定レス番取得
http://open2ch.net/ajax/get_ank.cgi/test/read.cgi/tech/1372506269/110

まとめ表示
http://uni.open2ch.net/ajax/get_matome.cgi?bbs=newsplus&key=1398169392

レス数取得
http://uni.open2ch.net/ajax/check_new_thread.cgi/newsplus/1398169392/
113名無しさん :2014/04/28(月)07:22:38 ID:eAfj7UOXv
onsubmitではスレのタイトルは分からない
タイトルを取得するAPIも用意されていない
subject.txt読み込むしかないのか
114名無しさん :2014/04/29(火)05:26:54 ID:U3xebeLkg
>113は、 板表示のonsubmitね
スレ表示は分かる
115名無しさん :2014/04/29(火)05:27:56 ID:U3xebeLkg
textContentは改行消えるから、jpgファイルを識別できなくなってしまう

本日の百合画像スレ
http://viper.open2ch.net/test/read.cgi/news4vip/1396087463/1
適当に貼ってく
ttp://s.cyrill.lilect.net/uploader/files/201401171934310001.jpg
ttp://s.cyrill.lilect.net/uploader/files/201403050215390003.jpg
ttp://s.cyrill.lilect.net/uploader/files/201401190352510002.jpg


let thread = document.getElementsByClassName("thread");
let dd = thread[0].getElementsByTagName("dd");

//"適当に貼ってくttp://s.cyrill.lilect.net/uploader/files/201401171934310001.jpgttp://s.cyrill.lilect.net/uploader/files/201403050215390003.jpgttp://s.cyrill.lilect.net/uploader/files/201401190352510002.jpghttp://s.cyrill.lilect.net/uploader/files/201401190352510002.jpg"
console.log(dd[0].textContent);
116おーぷん@名無しさん :2014/04/29(火)20:43:22 ID:nqLApvSrR
あげ
117名無しさん@おーぷん :2014/04/30(水)07:55:07 ID:vorSXbtAV
スレ表示中に最後のレス番号を取得

let nums = document.getElementsByClassName("num");
let last = nums[nums.length - 1];
document.title = last.getAttribute("val");
118名無しさん@おーぷん :2014/04/30(水)07:58:44 ID:vorSXbtAV
新着レスの表示を表示されている最後のレス番号以降にする

let nums = document.getElementsByClassName("num");
let last = nums[nums.length - 1].getAttribute("val");

let centers = document.getElementsByTagName("center");
let a = centers[0].getElementsByTagName("a");

a[0].href = a[0].href.replace(/[^\/]*$/, last + "-");
119名無しさん@おーぷん :2014/04/30(水)08:03:13 ID:vorSXbtAV
a[0].href = last + "-";

だけでいいのか
120名無しさん@おーぷん :2014/10/09(木)07:56:38 ID:nWz6UHdQn
/*
 http://open2ch.net/dev/toukei.cgi
 統計ページを表示して実行
*/
docLoaded(document);

function docLoaded(doc) {
 let output = [];

 // 掲示板の合計
 let tbody = doc.getElementsByTagName("tbody")[0];
 let text = tbody.textContent.replace(/^(\f|\r|\n)/gm, ""); // 空行削除
 let a = text.match(/\d+/gm); //bbs新スレ,bbs投稿,bbsID数,kome投稿数,kome接続数
 output.push("_all," + a[0] + "," + a[1] + "," + a[2]);
 output.push("_kome," + (a[3] || "0") + "," + (a[4] || "0"));

 // 各板
 let tbody3 = doc.getElementsByTagName("tbody")[3];
 let tr = tbody3.getElementsByTagName("tr");
 //tr[0] 新スレ投稿数ID数板
 for (let i = 1; i < tr.length; i++) {
  let td = tr[i].getElementsByTagName("td");
  let newthread = td[0].textContent.replace(/^\+/, "");
  let kakiko = td[1].textContent.replace(/^\+/, "");
  let id = td[2].textContent.replace(/^\+/, "");
  let ita = td[3].children[0].href.match(/\/[^\/]*\/$/)[0].replace("/", "", "g");
  if (ita) output.push(ita + ',' + newthread + ',' + kakiko + ',' + id);
 }
 console.log(output.join("\n"));
}
121名無しさん@おーぷん :2014/10/09(木)12:09:18 ID:nWz6UHdQn
docLoaded(document);

function docLoaded(doc) {
 console.log(doc.baseURI);

 let output = [];

 // 掲示板の合計
 let tbody = doc.getElementsByTagName("tbody")[0];
 let text = tbody.textContent.replace(/^(\f|\r|\n)/gm, ""); // 空行削除
 let a = text.match(/\d+/gm); //bbs新スレ,bbs投稿,bbsID数,kome投稿数,kome接続数
 output.push("_all," + a[0] + "," + a[1] + "," + a[2]);
 output.push("_kome," + (a[3] || "0") + "," + (a[4] || "0"));

 // 各板
 let tbody3 = doc.getElementsByTagName("tbody")[3];
 let tr = tbody3.getElementsByTagName("tr");
 //tr[0] 新スレ投稿数ID数板
 for (let i = 1; i < tr.length; i++) {
  let td = tr[i].getElementsByTagName("td");
  let newthread = td[0].textContent.replace(/^\+/, "");
  let kakiko = td[1].textContent.replace(/^\+/, "");
  let id = td[2].textContent.replace(/^\+/, "");
  let ita = td[3].children[0].href.match(/\/[^\/]*\/$/);
  if (ita && ita.length) ita = ita[0].replace("/", "", "g");
  if (ita) output.push(ita + ',' + newthread + ',' + kakiko + ',' + id);
 }
 console.log(output.join("\n"));
}
122名無しさん@おーぷん :2014/10/09(木)13:58:27 ID:nWz6UHdQn
今年9月の統計データ

おーぷん2ちゃんねるろだ | 2014-09.txt ダウンロード | uploader.jp
http://ux.getuploader.com/open2ch1/download/282/2014-09.txt
123名無しさん@おーぷん :2014/10/09(木)21:53:45 ID:nWz6UHdQn
_all _kome じゃなくて、
$all $kome にしよう
そうすれば、普通にソート可能だ

ASCII文字コード : IT用語辞典
http://e-words.jp/p/r-ascii.html
124名無しさん@おーぷん :2014/10/09(木)21:55:23 ID:nWz6UHdQn
あと、最初の行はバージョン情報に
0は空文字に

ver1
$all,1234,1234,1234

$kome,0,0,0
$kome,,,
125名無しさん@おーぷん :2014/10/09(木)23:02:24 ID:nWz6UHdQn
ああ、あと、改行を\nのみにしないと
半角だけだから、文字コードは気にしなくていいんだよね?
126名無しさん@おーぷん :2014/10/10(金)05:37:27 ID:QeryegckU
改行変えるだけにする
バージョン情報は互換性が無くなったらつける
127名無しさん@おーぷん :2014/10/23(木)06:06:01 ID:GxH7wbbRm
function getFileName(year, month) {
 return "D:\\open2ch\\stat\\" + year + '-' + ("0"+month).slice(-2) + '.txt';
}

// 1か月分のデータを取得
// monthdata[_all][0] にデータは無い
// monthdata[news4vip][1] でニュー速VIP1日目のデータ
// monthdata[_all][2].kakiko で2日目の全板の書き込み数
function getMonthData(text) {
 let lines = text.split("\n");
 let monthdata = {};
 for (let i = 0; i < lines.length; i++) {
  let a = lines[i].split(",");
  id = a[0];
  a.shift();
  data = [];
  data.push(""); // 0日
  if (id == "_kome") {
  } else {
   for (let j = 0; j < a.length; j += 3) {
    data.push({
     thread: a[j] ? parseInt(a[j].trim()) : 0,
     kakiko: a[j+1] ? parseInt(a[j+1].trim()) : 0,
     id: a[j+2] ? parseInt(a[j+2].trim()) : 0
    });
   }
   monthdata[id] = data;
  }
 }
 return monthdata;
}

let text = My.readText(getFileName(2014, 9)); // テキストファイル読み込み
let monthdata = getMonthData(text);
console.log(monthdata["_all"][10]);
console.log(monthdata["news4vip"][10]);
// http://open2ch.net/dev/toukei.cgi?d=2014-09-10
128名無しさん@おーぷん :2014/10/26(日)07:16:10 ID:tesYlpovL
新機能の履歴
更新に必要なのは、bbs と key
http://open2ch.net/ajax/add_history.cgi?bbs=nohara&key=1398921776
129名無しさん@おーぷん :2014/10/26(日)10:50:29 ID:tesYlpovL
自分でやってみたが
履歴に追加ボタンを押したら、未読を0にして、履歴を表示

 // 履歴に追加ボタン
 let history_add = doc.getElementById("history_add");
 history_add.onclick = function() {
  // http://open2ch.net/test/read.cgi/open2ch/1381914280/l50 → /test/read.cgi/open2ch/1381914280/l50
  // http://open2ch.net/ajax/add_history.cgi?bbs=nohara&key=1398921776
  let p = doc.location.pathname.split("/");
  let uri = doc.location.origin + "/ajax/add_history.cgi?bbs=" + p[3] + "&key=" + p[4];
  My.asyncReadURI(uri, function() {
   doc.location.href = "http://open2ch.net/test/history.cgi";
  });
 }
130名無しさん@おーぷん :2014/10/26(日)12:10:58 ID:tesYlpovL
よくよく考えたらダメだわ、>129
スレ表示から、ボタンを押すまでの間の
書き込みが見れない
131名無しさん@おーぷん :2014/10/27(月)00:43:14 ID:ARbFKeXjp
履歴から削除

1個
http://open2ch.net/test/history.cgi?mode=delete&chk:nohara:1398921776=1

2個
http://open2ch.net/test/history.cgi?mode=delete&chk:news4vip:1414332355=1&chk:news4vip:1414332348=1
132名無しさん@おーぷん :2014/10/27(月)06:12:28 ID:ARbFKeXjp
var thread = document.getElementsByClassName("thread");
for (var i = 0; i < thread.length; i++) {
 let a = thread[i].children[0];
 thread[i].appendChild(a);
};
133名無しさん@おーぷん :2014/10/27(月)08:43:56 ID:ARbFKeXjp
function asyncReadDoc(uri, callback) {
 let x = new XMLHttpRequest();
 x.onerror = function () { console.error("asyncReadDoc error: " + uri); }
 x.onload = function () { callback(x.responseXML); }
 x.open("GET", uri, true);
 x.responseType = "document";
 x.send(null);
}

// メニューから板idを取得
let BBS = {};

asyncReadDoc("http://open2ch.net/menu/pc_menu.html",
 function(doc) {
  let a = doc.getElementsByTagName("a");
  for (let i = 0; i < a.length; i++) {
   let p = a[i].href.split("/");
   if (p.length == 5 && p[2].length > 12 && p[4] == "")
    BBS[p[3]] = {url: a[i], title: a[i].textContent};
  }

  let list = [];
  for (i in BBS) list.push(i + " " + BBS[i].title);
  list.sort();
  //addText(list.length);
  //addText(list.join("\n"));
 }
);
134名無しさん@おーぷん :2014/10/27(月)12:17:15 ID:mECBfx9bN
asyncなんちゃらじゃなくて標準のfetchにしようぜ
135名無しさん@おーぷん :2014/10/27(月)20:52:09 ID:ARbFKeXjp
これのこと? Firefoxには付いていないようだけど

Fetch Standard
https://fetch.spec.whatwg.org/
136名無しさん@おーぷん :2014/10/27(月)23:35:23 ID:DW8stPxqx
習えってことだよ
137名無しさん@おーぷん :2014/10/28(火)23:48:42 ID:IKbrpxQEB
/*
統計情報ページの新規スレ一覧を表示させて実行

新規スレ一覧 | おーぷん2ちゃんねる統計情報
http://open2ch.net/dev/toukei.cgi?m=thread&bbs=news4vip
*/

let div = document.getElementsByTagName("div");
let lastdiv = div[div.length-1];

let a = lastdiv.getElementsByTagName("a");
let array = [];
for (let i = 0; i < a.length; i++) {
 a[i].res = a[i].textContent.match(/\(\d+\)$/)[0].match(/\d+/)[0];
 array.push(a[i]);
}

array.sort(function(a, b) { return b.res - a.res; });

let output = [];
for (let i = 0; i < array.length; i++) {
 let title = array[i].textContent;
 let thread = array[i].href.split("/")[6];
 let time = new Date(thread * 1000).toLocaleFormat("%H:%M");
 output.push(time + " " + title);
}

addText(output.join("\n")); // 自作関数
console.log(output.join("\n")); // 全部表示できない
138名無しさん@おーぷん :2014/11/09(日)09:05:54 ID:6KHZjy9M1
let p = doc.location.pathname.split("/");
let threadBoxLinks = doc.getElementsByClassName("thread-box-links");

// 「まとめる」は使わないので、#MESSAGEに
let a = threadBoxLinks[0].getElementsByTagName("a");
a[5].textContent = "#MESSAGE";
a[5].removeAttribute("target");
a[5].href = "#MESSAGE";

// 「履歴に戻る」を「履歴から削除」に変更
// リンクでやると余計なアクセスが発生するのでこうやる
//http://open2ch.net/test/history.cgi?mode=delete&chk:nohara:1398921776=1
a = threadBoxLinks[1].getElementsByTagName("a");
a[1].removeAttribute("href");
a[1].textContent = S("履歴から削除");
a[1].onclick = function() {
 let uri = "http://open2ch.net/test/history.cgi?mode=delete&chk:" + p[3] + ":" + p[4] + "=1";
 My.asyncReadURI(uri, function() {doc.location.href = "http://open2ch.net/test/history.cgi";});
}
139名無しさん@おーぷん :2014/11/23(日)21:06:25 ID:S7z
// -sp-context: browser
/*
メニューから板id,url,タイトルを取得(Firefox用)
menu.json
  lastModified
  bbs[id] = {url, title}
*/

let My = {};

My.asyncWriteText = function(filename, text, charset, callback) {
 Components.utils.import("resource://gre/modules/osfile.jsm");
 if (!charset) charset = "utf-8";
 OS.File.writeAtomic(filename, text, {encoding:charset}).then(
  function() {if (callback) callback();},
  function(e) { console.error('writeAtomic error:' + e); }
 );
}

My.asyncReadDoc = function(uri, onload) {
 let x = XMLHttpRequest();
 if (onload) x.onload = function() { onload(x.response); };
 x.onerror = function () { console.error("XMLHttpRequest error: " + uri); }
 x.open("GET", uri, true);
 x.responseType = "document";
 x.send(null);
}

My.asyncReadDoc("http://open2ch.net/menu/pc_menu.html",
 function(doc) {
  let bbs = Object.create(null);
  let a = doc.getElementsByTagName("a");
  for (let i = 0; i < a.length; i++) {
   let p = a[i].href.split("/");
   if (p.length == 5 && p[2].length > 12 && p[4] == "")
    bbs[p[3]] = {url: a[i].href, title: a[i].textContent};
  }
  let menu = Object.create(null);
  menu["lastModified"] = (new Date(doc.lastModified)).getTime();
  menu["bbs"] = bbs;
  let json = JSON.stringify(menu);
  My.asyncWriteText("E:\\open2ch\\menu.json", json);
 }
);
140名無しさん@おーぷん :2014/11/25(火)18:36:07 ID:yyR
1行減った

// 非同期ファイルに出力
My.asyncWriteText = function(filename, text, charset, callback) {
 Components.utils.import("resource://gre/modules/osfile.jsm");
 OS.File.writeAtomic(filename, text, {encoding:charset || "utf-8"}).then(
  function() {if (callback) callback();},
  function(e) { console.error("writeAtomic error: " + e); }
 );
}
141名無しさん@おーぷん :2014/11/25(火)19:31:06 ID:st9
チラ裏スレ上げるのやめろ
142名無しさん@おーぷん :2015/01/23(金)10:07:17 ID:stJ
お絵かき機能拡張ブックマークレット
http://open.open2ch.net/test/read.cgi/oekaki/1398766494/l10

o2oEXLite - Hatena::Let
http://let.st-hatelabo.com/Fxnimasu/let/hJmd88Dl4M4W

function loadOekakiEx(){
 //var url = "http://let.st-hatelabo.com/xnimasu/let/hJmdqJbmxJc2.bookmarklet.js";
 var url = "http://let.st-hatelabo.com/Fxnimasu/let/hJmd88Dl4M4W.bookmarklet.js";
 $.getScript(url);
}
143名無しさん@おーぷん :2015/01/23(金)10:14:39 ID:stJ
本体

https://c5af8bbe930377beabb41074f8e8a702a7fa7750.googledrive.com/host/0B1BW1N6rqpWFVVZ1ZS1KZDhLM3c/11.2.2/o2oEXLite.js

144名無しさん@おーぷん :2015/01/26(月)05:02:41 ID:J3F
Lazy Load Plugin for jQuery
http://www.appelsiini.net/projects/lazyload

https://raw.githubusercontent.com/tuupola/jquery_lazyload/master/jquery.lazyload.js
145名無しさん@おーぷん :2015/02/20(金)23:37:47 ID:UAN
2ch.netの方だけど、こんなことになってるらしい

https://developer.2ch.net/

2ch.net専用ブラウザの開発者の皆さまへ
お知らせ
2015/3/3以降、2ch.net専用ブラウザ(以下「専用ブラウザ」)を開発、公開するには、2ch.netの所有者であるRaceQueen社の許諾を得て、2ch.netが提供するAPI(以下「API」)を用いて開発する必要があります。
ウェブスクレイピングを用いた専用ブラウザの開発、公開は禁止されます。
datへのアクセスは近日廃止されます。
APIの使用許諾を得ずにAPIを使用することは、不正アクセス行為の禁止等に関する法律等関係する法律に違反することになります。違法行為を発見次第、刑事民事による適切な法的対応をされることになります。
株式会社ジェーン(以下「当社」)はRaceQueen社からAPIの使用許諾を得て、一部の専用ブラウザ開発者に対し、APIを使用許諾する権限を受けています。
当社はRaceQueen社との契約で2ch.net専用ブラウザ開発者に対しAPIの使用許諾を出す権限を受けていますが、これは排他的な権限ではありません。当フォームは当社経由でAPIの使用許諾を得たい開発者のための窓口となっております。

これで2chブラウザのほとんどは消え去るな
146名無しさん@おーぷん :2015/02/22(日)17:11:17 ID:5gG
>>145
個々人が行うブラウザアクセスを禁止することはできない。たとえ取得したHTMLを見る前に加工していたとしても
また2chAPIを無許可で使うアプリの配布を禁止することもできない。キーを抜いて配布するなら

だから、スクレイピングやAPIを実装しただけの専ブラは依然として配布できる
もちろん「APIを実装しただけ」な専ブラ使う人は正規のキーをちゃんと申請して手に入れること前提な。
どっちにしろ商用で配布ならまだしも、オープンソースな開発なら訴えられることもないよ
Jimは、ひろゆきを訴えないのは「あいつは裁判で負けても金を払わないから」と言っていたから
当然オープンソースも金を持ってない以上金を払わないから訴えられない

ちなみにAPIはJaneStyleの配布後12時間で解析完了、仕様書まで作られてる
147名無しさん@おーぷん :2015/03/04(水)10:00:37 ID:FVv
金がなくても資産を差し押さえられちゃうじゃん
148名無しさん@おーぷん :2015/03/04(水)10:01:52 ID:FVv
統計データ取得コードできた

function b(s) {return ('0'+s).slice(-2);}
function dateStr(d) { return d.getFullYear() + '-' + b(d.getMonth()+1) + '-' + b(d.getDate()); }
function between(s,a,b) {let i=s.indexOf(a),j=s.indexOf(b,i+a.length);return s.slice(i+a.length,j);}

var server = document.location.host;
server = (server == 'open2ch.net') ? '' : server.match(/^[^.]*\./)[0];
var uri = "http://" + server + "open2ch.net/dev/toukei.cgi?d=" + dateStr(new Date());

$.get(uri, function(text) {
 text = between(text, '<div style="padding:3px" id="timerBox">', '</table>');
 text = text.replace(/\<[^\>]*\>/igm, '');
 text = text.replace(/^\n/igm, '');
 var e = document.getElementById('MESSAGE');
 e.value = text;
});

ランキング更新日時:2015-03-04 10:01:01
(3分毎更新:あと180秒)
集計トップ |
新規スレッド一覧
2015-03-04の新規スレッド数、投稿数、IDの数の集計。
掲示板の合計:
新スレ:+582件
投稿:+22634件
ID数:3310 ID
149名無しさん@おーぷん :2015/03/18(水)22:29:38 ID:XCp
/*
カテゴリと板IDをJSONで取得

BBS MENU for open2ch
http://open2ch.net/menu/pc_menu.html

<BR><B>人気</B><BR>
<a href=http://hayabusa.open2ch.net/news4vip/>ニュー速VIP</a><br>
*/

var e = document.getElementsByTagName("font")[0].childNodes;

var output = Object.create(null);
var cat = "";
var a = [];
var i = 0;
while (i < e.length) {
 if (e[i].tagName == "B") {
  if (cat) output[cat] = a;
  cat = e[i].innerHTML;
  a = [];
 } else if (e[i].tagName == "A") {
  a.push(e[i].href.split("/")[3]);
 }
 i++;
}
output[cat] = a; // 最後のカテゴリ追加

console.log(JSON.stringify(output, null, " "));
150名無しさん@おーぷん :2015/03/18(水)22:30:25 ID:XCp
"{
"おすすめ": [
"oekaki",
"dev",
"headline.cgi",
"dev",
"test",
"dev",
"dev",
"plus",
"Top",
"dev",
"",
"menu"
],
"人気": [
"news4vip",
"livejupiter",
"gameswf",
"newsplus",
"appli",
"news4plus",
151名無しさん@おーぷん :2015/03/19(木)16:26:08 ID:r04
2ch.netはJSONで返すAPIが用意されてるけど
こっちはJSONでは提供しないんかね
152名無しさん@おーぷん :2015/03/19(木)18:41:40 ID:J9u
2chではやってるよ!
って大勢でお願いすれば、対応してくれるかもしれないけど
153名無しさん@おーぷん :2015/03/21(土)17:24:37 ID:DAT
投稿数/IDによるソートは、こうなるからあまり意味はないと思う

154名無しさん@おーぷん :2015/05/06(水)17:46:23 ID:bcO
統計ページから情報取得

http://open2ch.net/dev/toukei.cgi

var doc = gBrowser ? gBrowser.contentDocument : document;

// 投稿:+69549件
function getToukouSum(doc) {
 var tbody0 = doc.getElementsByTagName("tbody")[0];
 return parseInt(tbody0.textContent.match(/投稿:\+\d+件/)[0].match(/\d+/)[0].trim());
}

document.title = getToukouSum(doc);
155名無しさん@おーぷん :2015/05/06(水)17:47:10 ID:bcO
function getItaData(doc) {
 var result = [];
 var tbody3 = doc.getElementsByTagName("tbody")[3];
 var tr = tbody3.getElementsByTagName("tr");
 for(var i = 1; i < tr.length; i++){
  var td = tr[i].getElementsByTagName("td");
  var newThread = parseInt(td[0].textContent.replace("+", "").trim());
  var toukou = parseInt(td[1].textContent.replace("+", "").trim());
  var idNum = parseInt(td[2].textContent.trim());
  result.push({tr:tr[i], newThread:newThread, toukou:toukou, idNum:idNum});
 };
 return result;
}
156名無しさん@おーぷん :2015/05/07(木)15:56:44 ID:Ep8
こっちじゃないとダメだった

var doc = window.gBrowser ? window.gBrowser.contentDocument : document;
157名無しさん@おーぷん :2015/05/07(木)16:30:19 ID:Ep8
var doc = window.gBrowser ? window.gBrowser.contentDocument : document;

// 全板のデータ取得
function getItaData(doc) {
 var result = [];
 var tbody3 = doc.getElementsByTagName("TBODY")[3];
 var tr = tbody3.getElementsByTagName("TR");

 var tr0td = tr[0].getElementsByTagName("TD");
 var headers = [];
 for (var i = 0; i < tr0td.length; i++) {
  headers.push(tr0td[i].textContent.trim());
 }

 for(var i = 1; i < tr.length; i++){
  var td = tr[i].getElementsByTagName("TD");
  function _td(name){return td[headers.indexOf(name)];};
  function _text(name){return _td(name).textContent.trim();};
  function _num(name){return parseInt(_td(name).textContent.replace("+", "").trim());};
  result.push({
   tr: tr[i],
   thread: _num('新スレ'),
   toukou: _num('投稿数'),
   id: _num('ID数'),
   title: _text('板'),
   url: _td('板').getElementsByTagName("A")[0].href
  });
 };
 return result;
}

var dat = getItaData(doc);
dat.forEach(function(e) {
 console.log(e.thread + " " + e.toukou + " " + e.id + " " + e.title + " " + e.url);
});
158名無しさん@おーぷん :2015/05/07(木)16:39:23 ID:Ep8
>>157 の getItaData() と合わせて、
書き込みが1000以上の板の合計: 40902 (6板) 90.99%
を取得可能

var doc = window.gBrowser ? window.gBrowser.contentDocument : document;

// 投稿:+????件 の整数値を取得
function getToukouSum(doc) {
 var tbody0 = doc.getElementsByTagName("tbody")[0];
 return parseInt(tbody0.textContent.match(/投稿:\+\d+件/)[0].match(/\d+/)[0].trim());
}

// メイン
var dat = getItaData(doc);
var over1000bbs = 0;
var over1000toukou = 0;
dat.forEach(function(e) {
if (e.toukou >= 1000) {
over1000bbs++;
over1000toukou += e.toukou;
}
});

var toukou = getToukouSum(doc);
var output = "書き込みが1000以上の板の合計: " +
over1000toukou + " (" + over1000bbs + "板) " +
(over1000toukou / toukou * 100).toFixed(2) + "%";
console.log(output);
159名無しさん@おーぷん :2015/05/07(木)17:07:40 ID:Ep8
// 統計ページ上に出力用TEXTAREAを作成
function createOutputArea(doc) {
 var tbody0 = doc.getElementsByTagName("tbody")[0];
 var tr = tbody0.getElementsByTagName("tr");
 var ta = doc.getElementById("OutputArea");
 if (!ta) {
  var td = doc.createElement("td");
  ta = doc.createElement("TEXTAREA");
  ta.id = "OutputArea";
  tr[0].appendChild(td);
  td.appendChild(ta);
  ta.parentElement.style = "width:100%;height:100%";
  ta.style = "width:100%;height:100%";
  ta.setAttribute("wrap", "off");
 }
 return ta;
}

var doc = window.gBrowser ? window.gBrowser.contentDocument : document;
createOutputArea(doc);


160名無しさん@おーぷん :2015/05/07(木)22:23:35 ID:Ec7
必死チェッカーってJSだけで作れますか?
161名無しさん@おーぷん :2015/05/08(金)18:48:46 ID:MR3
>>160
JSだけってWebブラウザ上で動作させるってこと?
具体的にどういう機能を考えてるのかは分からないが、やろうと思えばできるだろう
162名無しさん@おーぷん :2015/05/08(金)21:07:11 ID:fBp
>>161
ブラウザだけで動くやつ

スレにあるIDを選択してJSを実行したら、別タブでそいつのIDで書き込んでいるスレURL、スレタイ、レスが一挙に表示される


こんなかんじ
163名無しさん@おーぷん :2015/05/08(金)22:53:05 ID:Qyj
openの必死チェッカーサイトがあれば、そこを呼び出すだけで出来るのだが。

open2ch 必死チェッカー - Google 検索
https://www.google.co.jp/search?q=open2ch+%E5%BF%85%E6%AD%BB%E3%83%81%E3%82%A7%E3%83%83%E3%82%AB%E3%83%BC
164名無しさん@おーぷん :2015/05/08(金)22:53:46 ID:Qyj
どんなに古いスレにも書き込めるって仕様が、やっかいだね
全スレをチェックしないといけないので非現実的。

subjects.txtに載ってるスレのみのチェックなら、
Firefoxの「拡張」でできる。
Chromeは知らん
HTMLではログの保存ができないから、無理。
165名無しさん@おーぷん :2015/06/05(金)17:23:06 ID:xEE
サーバはApache、言語はPerl

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache Server at open02.open2ch.net Port 80



Undefined subroutine &Digest::SHA1::sha1_base64 called at lib/write_func.pl line 53.
For help, please send mail to the webmaster (root@localhost), giving this error message and the time and date of the error.
166名無しさん@おーぷん :2015/07/03(金)19:13:40 ID:sf6
imgurに直リンを規制されたっぽいな
負荷のかけすぎか
対象ドメインはuni.open2ch.netとhayabusa.open2ch.netかな
167名無しさん@おーぷん :2015/07/27(月)00:48:05 ID:YAR
*.open2ch.netだったり
>>166
168名無しさん@おーぷん :2015/07/27(月)00:58:46 ID:YAR

https://api.imgur.com
Free Usage
The Imgur API is free for non-commercial usage. Your application is probably free if you don't plan on making any money with it, or if it's open source.

Heavy Free Usage
If your application is free, but isn't going to work with our rate limiting, then we might be willing to white-list it.
Fill out this form submit your white-list request. We will review your request, and if granted, will give you all the access your awesome app desires!

https://api.imgur.com/#limits
Rate Limits
The Imgur API uses a credit allocation system to ensure fair distribution of capacity.

Each application can allow approximately 1,250 uploads per day or approximately 12,500 requests per day.

If the daily limit is hit five times in a month, then the app will be blocked for the rest of the month.
The remaining credit limit will be shown with each requests response in the X-RateLimit-ClientRemaining HTTP header.



API制限に今更引っかかるとか?
169名無しさん@おーぷん :2015/08/14(金)12:11:54 ID:qP0
あげ
170名無しさん@おーぷん :2015/08/17(月)01:01:58 ID:t75
age
171名無しさん@おーぷん :2015/08/29(土)04:20:15 ID:eG5
age
172名無しさん@おーぷん :2015/10/08(木)18:13:10 ID:JLP
履歴ページ表示中に実行することで
板IDとスレIDを取得

履歴@おーぷん2ちゃんねる
http://open2ch.net/test/history.cgi

let a = document.getElementsByClassName('th');
for (let i = 0; i < a.length - 1; i++) {
let key = a[i].getAttribute('key');
console.log(key);
}

livejupiter:1444282020
news:1444269639
173名無しさん@おーぷん :2015/10/08(木)18:16:42 ID:JLP
削除はこうやって複数できるけど、
追加は出来ない
mode=add
は無かった

http://open2ch.net/test/history.cgi?mode=delete&chk:news4vip:1414332355=1&chk:news4vip:1414332348=1
174その1 :2015/10/08(木)19:39:02 ID:fjq
// -sp-context: browser
// Firefox用 実行環境=ブラウザ

/*
表示してあるページの履歴を追加します。

使い方
1) 履歴ページを表示する
2) Cookie を削除
3) これを実行

ローカルファイルに保存した履歴.html も復元できます。
*/

(function(){

var doc = window.gBrowser ? window.gBrowser.contentDocument : document;
var My = {};

// 非同期 URI 読み込み
My.asyncReadURI = function(uri, onload) {
 //addText('asyncReadURI:' + uri);
 let x = new XMLHttpRequest();
 x.onerror = function () { console.error("XMLHttpRequest error: " + uri); };
 if (onload) x.onload = function () { onload(x.responseText); };
 x.open("GET", uri, true);
 x.responseType = "text";
 x.send(null);
}
175その2 :2015/10/08(木)19:39:26 ID:fjq

// 非同期関数の逐次実行
My.createSeqJobs = function() {
 let result = [];
 result.add = function(args) {
  result.push(Array.prototype.slice.call(arguments));
 }
 result.wait = function(msec) {
  function _wait(msec) {
   setTimeout(function(){result.next();}, msec);
  }
  result.add(_wait, msec);
 }
 result.next = function() {
  let job = result.shift();
  if (job) {
   let func = job.shift();
   if (func) func.apply(null, job);
  }
 }
 result.run = function() {
  result.next();
 }
 return result;
}
176その3 :2015/10/08(木)19:39:45 ID:fjq
// メイン
let jobs = My.createSeqJobs();
let a = doc.getElementsByClassName('th');
if (!a || a.length == 0) { throw "履歴がありません"; };

let max = a.length;
//let max = a.length > 30 ? 30 : a.length;
//let max = a.length > 3 ? 3 : a.length;

for (let i = 0; i < max; i++) {
 let s = a[i].getAttribute('key').split(':');
 let bbs = s[0];
 let thread = s[1];

 //http://open2ch.net/ajax/add_history.cgi?bbs=nohara&key=1398921776
 let uri = "http://open2ch.net/ajax/add_history.cgi?bbs=" + bbs + "&key=" + thread;
 //addText('add:' + uri);

 jobs.add(My.asyncReadURI, uri, function(text) {
  console.log(uri + ' -> ' + text);
  jobs.next();
 });

 jobs.wait(1000); // 1秒待機
}

jobs.add(function() { console.log('update all done'); beep(); });
jobs.run();

})();
177名無しさん@おーぷん :2015/10/08(木)19:41:44 ID:fjq
その3の下のほうの beep(); は無かった
消してください
178名無しさん@おーぷん :2015/10/08(木)19:42:45 ID:fjq
あ、順番が逆になるっぽい
179名無しさん@おーぷん :2015/10/08(木)21:58:33 ID:og0
使い方がイマイチ分からない件
180名無しさん@おーぷん :2015/10/09(金)03:06:59 ID:YJw
Firefox限定

1) about:config で devtools.chrome.enabled = true にする
2) スクラッチパッドを起動 (Shift+F4だったかな)
3) スクラッチパッドのメインメニューから、実行環境→ブラウザ
4) その1~その3をコピペ (beep(); は消す)
6) 履歴ページを表示する
7) Cookie を削除
8) オプション画面ではダメなので、履歴のページに戻る
9) スクラッチパッドで実行

こんな感じなのだけれども、もうちょっと別のを考えます
181名無しさん@おーぷん :2015/10/09(金)04:37:03 ID:YJw
別のやりかた (ブックマークレットでも出来そう)

1) 履歴のページ(http://open2ch.net/test/history.cgi)
ファイルメニューの「名前を付けて保存」でローカルに保存します。

2) Cookie を削除。

3) 1)で保存したファイルを開きます。

4) ソースをFirefoxのスクラッチパッドにコピペして実行。

5)履歴のページを表示中に実行すると、↓のようなリンクが追加され、
それをクリックすると、履歴に追加されます

リンクをクリックして、ブラウザの「戻る」ボタンをクリックして戻って、
またリンクをクリック・・・とやれば、履歴に追加したいスレだけ追加できます。

以下ソース

182名無しさん@おーぷん :2015/10/09(金)04:37:36 ID:YJw
// 実行環境=Webページ

let th = document.getElementsByClassName('th');
if (!th || th.length == 0) { throw "履歴がありません"; };

let e = document.getElementById('add_link');
if (e) return;

e = document.createElement('div');
e.id = 'add_link';
e.style = "background:darkgreen;color:white;padding:5px;margin-bottom:3px";
e.textContent='履歴に追加するリンク';
document.body.insertBefore(e, document.body.firstChild);

let div = document.getElementsByTagName('div');

for (let i = 0; i < th.length; i++) {
 let s = th[i].getAttribute('key').split(':');
 let bbs = s[0];
 let thread = s[1];
 let uri = "http://open2ch.net/ajax/add_history.cgi?bbs=" + bbs + "&key=" + thread;

 let br = document.createElement('br');
 document.body.insertBefore(br, div[1]);

 let a = document.createElement('a');
 a.href = uri;
 a.textContent = th[i].textContent;
 document.body.insertBefore(a, div[1]);
}
183名無しさん@おーぷん :2015/10/09(金)04:42:48 ID:YJw
ソースを実行して「履歴に追加するリンク」を表示させてから
ローカルに保存しても、「履歴に追加するリンク」は保存されないから注意して。
184名無しさん@おーぷん :2015/10/09(金)05:22:19 ID:s9W
履歴を整理するためのプログラムか
おーぷんの機能で十分だと思うんだけど

クッキーを消す必要性もわからない
クッキー消すと主権限とかが消えるから消さない方がいい
185名無しさん@おーぷん :2015/10/09(金)06:37:09 ID:YJw
>>184
履歴がぶっ壊れたときとか、
Cookieを消す必要に迫られたけど、履歴は残しておきたい時とか、
別のブラウザ・アカウント・PCを使うときとか

バグ報告スレ 表示、動作の異常など3
http://open.open2ch.net/test/read.cgi/open2ch/1444247672/4-6
186名無しさん@おーぷん :2015/10/09(金)06:43:27 ID:s9W
>>185
履歴をバックアップから復元するってこと?
なら一件ずつ追加じゃなくて一括で追加にした方がいいかと
187名無しさん@おーぷん :2015/10/09(金)06:48:41 ID:YJw
>>186
一括方式は >>174-180 だけど、FirefoxのXULを使うので、
一般向けではないかもしれない。

同一ドメインのWebページを非同期で逐次読み込む方法を忘れました
できたかどうかも思い出せないや
188名無しさん@おーぷん :2015/10/09(金)06:51:09 ID:YJw
順番に

"http://open2ch.net/ajax/add_history.cgi?bbs=" + bbs + "&key=" + thread;

を実行したいんだけど、XULを使ったやり方しか知らないってことです。

AJAXとか使ってやるのかな?
189名無しさん@おーぷん :2015/10/09(金)06:57:57 ID:s9W
>>187
XULの機能はほとんど使ってないように見えるけど
少しいじれば汎用的になるんじゃない?
190名無しさん@おーぷん :2015/10/09(金)07:12:06 ID:YJw
ブラウザのJavaScriptを有効にする必要があったんだ。
beep(); 消して、そのままでいけるはず。
もうちょっといじって載せます。
191名無しさん@おーぷん :2015/10/09(金)07:22:27 ID:YJw
XUL使わないと、ローカルファイルから復元は無理なんだ
ドメイン違うから

>>174-180 のやり方で、最後に
ReferenceError: beep is not defined
が出るけど、
http://open2ch.net/test/history.cgi
を表示中なら、Webページでも実行できます。

beep();を消せば出なくなる。
192その1 :2015/10/09(金)07:24:09 ID:YJw
/*
表示してあるページの全履歴を追加し直します。

使い方
1) 履歴ページを表示する
2) Cookie を削除
3) これを実行
ローカルファイルに保存した履歴.htm は使えません。
*/

(function(){

var My = {};

// 非同期 URI 読み込み
My.asyncReadURI = function(uri, onload) {
 let x = new XMLHttpRequest();
 x.onerror = function () { console.error("XMLHttpRequest error: " + uri); };
 if (onload) x.onload = function () { onload(x.responseText); };
 x.open("GET", uri, true);
 x.responseType = "text";
 x.send(null);
}
193名無しさん@おーぷん :2015/10/09(金)07:24:26 ID:YJw
// 非同期関数の逐次実行
My.createSeqJobs = function() {
 let result = [];
 result.add = function(args) {
  result.push(Array.prototype.slice.call(arguments));
 }
 result.wait = function(msec) {
  function _wait(msec) {
   setTimeout(function(){result.next();}, msec);
  }
  result.add(_wait, msec);
 }
 result.next = function() {
  let job = result.shift();
  if (job) {
   let func = job.shift();
   if (func) func.apply(null, job);
  }
 }
 result.run = function() {
  result.next();
 }
 return result;
}
194名無しさん@おーぷん :2015/10/09(金)07:26:58 ID:YJw
その3を書き込めない
195その3(最後) :2015/10/09(金)07:32:47 ID:XXp
// メイン
let jobs = My.createSeqJobs();
let a = document.getElementsByClassName('th');
if (!a || a.length == 0) { throw "履歴がありません"; };

let max = a.length;
//let max = a.length > 3 ? 3 : a.length;
let count = max;

for (let i = max - 1; i >= 0; i--) {
 let s = a[i].getAttribute('key').split(':');
 let bbs = s[0];
 let thread = s[1];

 let uri = "ht" + "tp://open2ch.net/ajax/add_history.cgi?bbs=" + bbs + "&key=" + thread;
 // console.log('add:' + uri);

 jobs.add(My.asyncReadURI, uri, function(text) {
  count--;
  document.title = '残り' + count + ' ' + uri + ' -> ' + text;
  jobs.next();
 });

 jobs.wait(500); // 0.5秒待機
}

jobs.add(function() { document.title = '履歴の追加が終わりました'; });
jobs.run();

})();
196名無しさん@おーぷん :2015/10/09(金)07:33:23 ID:XXp
書けた
リンク規制だったみたい
"ht" + "tp
と分けたらできた
197名無しさん@おーぷん :2015/10/09(金)07:34:44 ID:s9W
>>191
なるほど
実装するとしたらおーぷんのページでJavaScriptを実行して、ローカルファイルをFileReaderで読み込む感じかな

あとletはまだほとんどのブラウザで使えない
198名無しさん@おーぷん :2015/10/09(金)07:47:47 ID:XXp
クリップボード経由で考えてみました

TEXTAREA、履歴を取得ボタン、履歴の追加ボタンを作る

履歴の保存
履歴の取得ボタンを押すと、履歴データを下記の形式でTEXTAREAに出力する
ユーザーにコピペでメモ帳等にコピーしてもらって、保存

履歴の復元
TEXTAREAに下記形式のデータを貼り付ける
履歴の追加ボタンを押して、追加する

tech:1372506269:open2chのソース
news:1444302946:出会い系で女性と合う約束をした少年(17) 現れた33歳のお
newsplus:1444333587:【経済】首相値下げ指示、NTTコム社長「おせっかい」 [H2
199名無しさん@おーぷん :2015/10/09(金)20:21:23 ID:97E
ES5までの機能でかつブラウザ固有のスクリプト抜き作って欲しい
200名無しさん@おーぷん :2015/10/10(土)06:58:33 ID:t8f
let を var に置換すれば使えそうだけど

Mozilla における ECMAScript 5 のサポート - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/ECMAScript_5_support_in_Mozilla

Mozilla における ECMAScript 6 のサポート - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla
201名無しさん@おーぷん :2015/10/21(水)09:53:21 ID:uOj
komeってどーいう仕組みなん?
202名無しさん@おーぷん :2015/10/21(水)12:19:27 ID:0Gk
komeの仕組みを調べるスレ
http://open2ch.net/test/read.cgi/php/1397296436/
203名無しさん@おーぷん :2015/11/04(水)19:59:24 ID:WG1
age
204名無しさん@おーぷん :2015/11/04(水)20:01:04 ID:WG1
>>168
【新機能】画像のサムネ画横に並ぶよ
http://hayabusa.open2ch.net/test/read.cgi/news4vip/1446567126/



33 名無しさん@おーぷん[] 2015/11/04(水)01:29:12 ID:Ppm

クリックするとimgurのサイトに飛ぶの俺だけ?

37 名無しさん@おーぷん[] 2015/11/04(水)01:31:29 ID:tRI

>>33
imgurの管理人が画像直りんしてたら一回ブロックされたんよ
サイトに飛ぶようにしないとだめらしい
205名無しさん@おーぷん :2015/11/04(水)21:29:59 ID:D06
imgurが広告を表示させるためなのか
206名無しさん@おーぷん :2015/11/04(水)23:14:41 ID:kta
>>205
単純にAPI制限
207名無しさん@おーぷん :2015/11/12(木)21:29:09 ID:8Vb
強制sage解除条件が緩和されたらしい
208名無しさん@おーぷん :2015/11/12(木)22:09:26 ID:Hmk
ソースもなしに
209名無しさん@おーぷん :2015/11/12(木)22:21:51 ID:GIP
強制sageのことは書いてない

更新状況はここで
http://open.open2ch.net/test/read.cgi/open2ch/1339040173/1031-
210名無しさん@おーぷん :2015/11/14(土)05:32:51 ID:I5y
HTMLソースを書き込めない
211名無しさん@おーぷん :2015/11/14(土)05:34:02 ID:be5
>>210
行数が多かったとか?
212名無しさん@おーぷん :2015/11/14(土)05:35:18 ID:be5
open.open2ch.net/test/read.cgi/open2ch/1350652390/1697
これはブックマークレットで?
213名無しさん@おーぷん :2015/11/14(土)05:38:11 ID:I5y
>>212
んにゃ、ローカルファイルです
214名無しさん@おーぷん :2015/11/14(土)05:39:37 ID:I5y
>>211
たかだか10行です

1行ずつなら書き込めるようだ
215名無しさん@おーぷん :2015/11/14(土)05:41:16 ID:be5
左側のメニュー部分が
普通のメニューの項目と違うように見えるのだけど
216名無しさん@おーぷん :2015/11/14(土)05:41:20 ID:I5y
関係あるところだけ抜き出す

<head><title>おーぷん2ちゃんねる</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
217名無しさん@おーぷん :2015/11/14(土)05:41:32 ID:I5y
<frameset cols="92,*">
<frame id="menu" src="open2chmenu.html" frameBorder=0 marginWidth=0 marginHeight=0></frame>
218名無しさん@おーぷん :2015/11/14(土)05:41:46 ID:I5y
<frame id="view" name="headline" src="http://open2ch.net/headline.cgi?mode=all&o=updated" frameBorder=1></frame>
</frameset>

これで分ると思う
219名無しさん@おーぷん :2015/11/14(土)05:43:19 ID:I5y
で、open2chmenu.htmlが、

<base href="http://open2ch.net/headline.cgi" target="headline">
<font size=2>

<form action=http://open2ch.net/headline.cgi method=get>
<input name=q size=15 placeholder="スレタイ検索"><dt>
</form>
<a href=?bbs=all&o=created&n=100>作成順</a> <a href=http://open2ch.net/test/history.cgi>履歴</a><dt>
<a href=?bbs=open2ch&o=updated>open2ch</a>
<a href=http://open2ch.net/open2ch/#menu>□</a><dt>
<a href=?bbs=news4vip&o=updated>ニュー速VIP</a><dt>
<a href=?bbs=livejupiter&o=updated>なんJ</a><dt>
<br>
220名無しさん@おーぷん :2015/11/14(土)05:45:41 ID:I5y
219はいけた

>>216-218のHTMLを一つにして書き込んでみて
cloudflareが危険視するみたい
221名無しさん@おーぷん :2015/11/14(土)05:46:19 ID:be5
>>215
open2chmenu.htmlをローカルに作って
自分の必要なスレをリストアップしているということなんだね
222名無しさん@おーぷん :2015/11/14(土)05:47:34 ID:I5y
昔ここに書き込んでたわ
思い出した

要望スレ               
http://open.open2ch.net/test/read.cgi/open2ch/1350652349/496-497
223名無しさん@おーぷん :2015/11/14(土)05:49:29 ID:I5y
>>221
open2chmenu.htmlとあと、親のファイルね
224名無しさん@おーぷん :2015/11/14(土)05:51:52 ID:be5
>>223
なるほど
仕組みはわかった


このスレは>>223が立てたスレなの?
225名無しさん@おーぷん :2015/11/14(土)05:55:04 ID:I5y
>>224
そだよ

>222のスクショ
http://image.open2ch.net/p/open2ch-1350652349-493.png
226名無しさん@おーぷん :2015/11/14(土)05:57:06 ID:I5y
ヘッドラインの見た目が違うのは、
Firefoxの拡張でやってます

↓が何もしていないヘッドライン

227名無しさん@おーぷん :2015/11/14(土)05:59:18 ID:be5
自分用のhtmlで管理するというのは
いいアイデアだね
参考にさせてもらうわ
228名無しさん@おーぷん :2015/11/14(土)06:02:09 ID:be5
話しかわるけど

firefox使っているのだけど
ここ数日前にメニューバーのあたりに見慣れないアイコンがでてきたんだよ
これって自動のアップデートのせいなんだろうか
229名無しさん@おーぷん :2015/11/14(土)06:07:37 ID:I5y
これじゃないかな

Firefox 42.0 リリースノート
http://www.mozilla.jp/firefox/42.0/releasenotes/
音声を再生しているタブにアイコンが表示されるようになりました。そのアイコンをクリックすることで、
音声をミュートできます
230名無しさん@おーぷん :2015/11/14(土)06:10:11 ID:be5
>>229
なるほどそれだわ
突然だからびっくりした
もう
自動更新できないようにしとこ。
231名無しさん@おーぷん :2015/11/14(土)06:14:39 ID:I5y
ただ、
フレームメニューはアドレスバーやタイトルバーが変わってくれないという欠点がある
解決しようといろいろやったけど難しかったです
232名無しさん@おーぷん :2015/11/27(金)14:00:37 ID:1hG
ヘッドラインで、指定した板IDのスレ、指定したキーワードを含むタイトルを非表示

// http://open2ch.net/headline.cgi?n=500

var delBBS = ["news4vip", "livejupiter"];
var delTitle = ["艦これ"];

var doc = gBrowser.contentDocument;
var tbody = doc.getElementsByTagName("tbody");
var a = tbody[1].getElementsByTagName("a");
233名無しさん@おーぷん :2015/11/27(金)14:00:53 ID:1hG
function checkTitle(title) {
 for (var i = 0; i < delTitle.length; i++) {
  if (title.indexOf(delTitle[i]) >= 0) return true;
 }
 return false;
}
234名無しさん@おーぷん :2015/11/27(金)14:01:10 ID:1hG
for (var i = 0; i < a.length; i++) {
 var bbs = a[i].pathname.split("/")[3];
235名無しさん@おーぷん :2015/11/27(金)14:01:16 ID:1hG
 if ((delBBS.indexOf(bbs) >= 0) || checkTitle(a[i].textContent))
  a[i].parentElement.parentElement.setAttribute("hidden", 1);
}
236名無しさん@おーぷん :2015/11/27(金)14:01:41 ID:1hG
一度に書き込めない
one more step 云々が出る
237名無しさん@おーぷん :2015/11/27(金)14:12:16 ID:1hG
JavaScriptを有効にしたら書き込めた
238名無しさん@おーぷん :2015/11/27(金)20:02:21 ID:1hG
/*
ヘッドラインで、指定した板IDのスレ、指定したキーワードを含むタイトルを非表示
URIで指定するバージョン
Firefoxでテスト
実行環境はWebページとブラウザの両方に対応
http://open2ch.net/headline.cgi?o=updated&n=500&delbbs=news4vip%20livejupiter&deltitle=艦これ
*/

function getURIQueryObj(uri) {
 var result = {};
 var m = uri.match(/\?.*/); // find ?
 if (m) {
  var s = m[0];
  s = s ? s.slice(1) : "";
  s = s.replace(/#.*$/, "");
  var a = s.split("&");
  for (var i = 0; i < a.length; i++) {
   var p = a[i].indexOf("=");
   if (p) {
    var name = decodeURIComponent(a[i].slice(0, p));
    var value = decodeURIComponent(a[i].slice(p + 1));
    result[name] = value;
   }
  }
 }
 return result;
}

var doc = window.gBrowser ? gBrowser.contentDocument : document;
var delBBS = getURIQueryObj(doc.location.href)["delbbs"];
delBBS = delBBS ? delBBS.split(" ") : [];
var delTitle = getURIQueryObj(doc.location.href)["deltitle"];
delTitle = delTitle ? delTitle.split(" ") : [];
var tbody = doc.getElementsByTagName("tbody");
var a = tbody[1].getElementsByTagName("a");

function checkTitle(title) {
 for (var i = 0; i < delTitle.length; i++) {
  if (title.indexOf(delTitle[i]) >= 0) return true;
 }
 return false;
}

for (var i = 0; i < a.length; i++) {
 var bbs = a[i].pathname.split("/")[3];
 if ((delBBS.indexOf(bbs) >= 0) || checkTitle(a[i].textContent))
  a[i].parentElement.parentElement.setAttribute("hidden", 1);
}
239名無しさん@おーぷん :2015/11/27(金)20:04:26 ID:1hG
http://open2ch.net/headline.cgi
が表示されたときに、238を、
実行するようにすると、スレを削除できます。

「表示されたときに実行する」
これが知らない人には大変なわけですけど。
240名無しさん@おーぷん :2015/11/27(金)20:37:38 ID:1hG
おーぷん2ちゃんねるヘッドライン
http://open2ch.net/headline.cgi?o=updated&delbbs=news4vip%20livejupiter
のイメージ
URIで指定する方が、複数のパターンを選べて便利
拡張に埋め込んだり、外部ファイルに設定を置くのは不便
あと、,はURLの予約文字語なので、news4vip,livejupiterのようにしない

「指定したキーワードを含むタイトルを非表示」
全角文字を含むことになると、URIでエンコードされて長くなるのが問題かも

241名無しさん@おーぷん :2015/11/27(金)20:52:38 ID:1hG
http://open2ch.net/headline.cgi?o=updated&n=200

n=200とn=400 が n=50になる
意味わかんない

n=300 n=500 はちゃんと 300, 500 表示になる
500がmaxみたいだけど

http://open2ch.net/headline.cgi?o=updated&n=200
http://open2ch.net/headline.cgi?o=updated&n=300
http://open2ch.net/headline.cgi?o=updated&n=400
http://open2ch.net/headline.cgi?o=updated&n=500
242名無しさん@おーぷん :2015/11/27(金)21:04:07 ID:1hG
nは、50 100 300 500 のみ対応かな
全部確認してられない

総合ヘッドラインからVIPとなんJを削除する場合、
n=100で 約34レス残る
n=300で 約111レス残る
n=500で 約184レス残る

n=100で十分かも
お好きなほうを
243名無しさん@おーぷん :2015/11/27(金)22:18:12 ID:1hG
なんでJavaScriptが有効でないと One more step に飛ばされるのか解らない
googleが要求しているようだけど

http://www.google.com/recaptcha/api/noscript?k=

他にも出た人がいるようですが、長文ソース等を書き込むときは、
専ブラからJavaScriptが有効だと、ヘッダに付け加える必要があるのかも
具体的なやり方は知りません。

要望スレ
http://open.open2ch.net/test/read.cgi/open2ch/1350652390/1710-1720
244名無しさん@おーぷん :2015/11/28(土)16:54:42 ID:VpA
view-source:http://open.open2ch.net/test/read.cgi/nohara/1447244804/l10
http://open.open2ch.net/lib/lazyload/jquery.lazyload.min.js

一般ブラウザの場合、
JavaScriptが有効なら、画像が見えたら読み込みが発生している。
無効なら最初から画像の読み込みは発生しない。
245名無しさん@おーぷん :2015/12/04(金)17:38:49 ID:U4Q
あげあげ
246名無しさん@おーぷん :2015/12/16(水)07:47:18 ID:MrV
おーぷんで文字の反転が禁止になって、ついでに文字参照も無効になったな
247名無しさん@おーぷん :2016/01/14(木)13:40:54 ID:EAU
新年になって名前欄の処理が変わったな
【】が{}に変えられて工作ができなくなったり
<b>がある程度適切に挿入されるようになったりと
248名無しさん@おーぷん :2016/08/02(火)14:47:57 ID:su7
ageテスト
249名無しさん@おーぷん :2016/08/02(火)14:51:36 ID:su7
mailがsageでないときは上がるようになったのか
250名無しさん@おーぷん :2016/10/27(木)18:25:42 ID:PCj
運営がソースをいじってるようで色々不具合が出てるな

datが破損しているスレ
http://hayabusa.open2ch.net/test/read.cgi/news4vip/1477532378/
251名無しさん@おーぷん :2016/10/27(木)19:14:55 ID:PCj
ヘッドラインがメンテ中
http://open2ch.net/headline.cgi?p=&o=updated&rn=&n=100&q=&bbs=

> mente
252名無しさん@おーぷん :2017/01/23(月)23:00:08 ID:nmU
てs
253名無しさん@おーぷん :2017/01/23(月)23:00:45 ID:nmU
>>251
メンテは直った模様
254名無しさん@おーぷん :2017/01/23(月)23:09:05 ID:nmU
先ほどchromeのシークレットモードでopen2chにアクセスした際に生成されたcookie(※valueは一部のみ表示)





注目すべきはExpires/Max-Ageの項目
2018/01/23 22:56頃にcookieの賞味期限が切れるらしい

このことから、cookieの賞無期限は1年間であることがわかる
つまり、履歴(http://open2ch.net/test/history.cgi )は「※6ヶ月以上経過した履歴は自動消去されるべ」であるし、
かつ初めておーぷん2ちゃんねるに訪問してから1年経つと「履歴も主権限もいろいろ消えてしまう」のでは
と思われる
255名無しさん@おーぷん :2017/01/24(火)00:25:58 ID:eLQ
>>254
前はCookieの期限は10年あったのにな
256名無しさん@おーぷん :2017/08/09(水)05:54:21 ID:zyl
履歴がどんどん削除されてる
もしかして、6ヶ月経過の基準って履歴を更新した日じゃなくて、初めて登録した日なのか
そうだとしたら使いにくい機能だな
257名無しさん@おーぷん :2017/08/09(水)05:59:34 ID:zyl
もしかして、最近履歴機能を運営がいじったのか?

> 604 :名無しさん@おーぷん :2017/08/07(月)05:00:47 ID:bvn
> 新着レスがあるのに経歴に表示されなかった+0のまま
> この不具合は初めてだ

http://open.open2ch.net/test/read.cgi/open2ch/1426352312/604
258名無しさん@おーぷん :2017/08/09(水)06:03:42 ID:zyl
>>256
6ヶ月って、180日とか日にちとかを基準にしてるんじゃなくて、月が変わったらカウントするっぽいな
2/20ぐらいに登録したスレも消えてる
259名無しさん@おーぷん :2017/10/20(金)08:36:48 ID:RHm
さとるがGitHubのリポジトリを作ってたみたいだ
https://github.com/satorunet/open2ch

中身はただの画像置き場だったが
260名無しさん@おーぷん :2017/10/20(金)15:24:45 ID:RHm
スレにyomiボタンが出てレスが読み上げられるようになってる
現在進行形でソースを編集してるっぽい
読まれるのは表示されてる最初のレスだけで、二回以上は再生できない

input要素の下にソースがある
<input type=button value="yomi" id=yomiage playing=0>
261名無しさん@おーぷん :2017/10/20(金)16:30:50 ID:RHm
直接ソース貼れない
https://jsfiddle.net/7n8t6smh/
262名無しさん@おーぷん :2017/10/20(金)16:32:38 ID:RHm
>>260
結局削除されたな
263名無しさん@おーぷん :2018/02/14(水)09:59:32 ID:Bsw
今日はレスの末尾に♦♣の内どれか3つがつくのか
何故かスペードがない♣
264名無しさん@おーぷん :2018/02/14(水)10:27:58 ID:Bsw
ところで6ヶ月経過してない履歴がいきなり消えるのは何なんだ
古いのが全て消えてるわけではないしバグか?♣♦
265名無しさん@おーぷん :2018/02/14(水)10:30:46 ID:Bsw
履歴が消えるのは>>256なのかな♦♣
266名無しさん@おーぷん :2018/08/15(水)08:42:57 ID:akp
おーぷんしっかりしろ

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache Server at open01.open2ch.net Port 80
267名無しさん@おーぷん :2018/08/15(水)09:10:47 ID:akp
>>266
一時的なエラーじゃなくてバグっぽいな
(URL)(スペース)(ASCII文字)の並びで特定のパターンのときにエラーを吐くようだ
268名無しさん@おーぷん :2018/08/15(水)09:31:23 ID:akp
(URL)(特定の文字列) か
スペースがなくてもエラーになる

新着レスの表示 | ここまで読んだ

名前: mail:





open2chのソース
CRITEO