質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

270閲覧

JavaScriptでHTMLの"<texterea>"に書いてある文章を取得してツイートしたい

molgen46

総合スコア11

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/08/28 12:25

編集2018/08/28 12:30

前提・実現したいこと

JavaScriptでHTMLの"<texterea>"に書いてある文章を取得してツイートしたい

JavaScriptを最近勉強し始めた初心者です。
サイト内にテキストエリアを設置し、その中身をツイートする機能を諸事情で作りたいのですが
ツイートボタンを押したあとに新規ウィンドウは表示されるのですが、下記のエラーメッセージが表示されます。

発生している問題・エラーメッセージ

ブラウザ:GoogleChrome このページは動作していません この問題が何度も発生する場合は、サイト所有者にお問い合わせください。 HTTP ERROR 400

該当のソースコード

HTML

1<form name="result_form"> 2<textarea name="result" rows="5" cols="60"></textarea> 3<p><input type="button" value="文章をツイート" onclick="twitText()"/></p>

JavaScript

1function twitText() { 2 var s, url; 3 s = document.result_form.result.value; 4 url = document.location.href; 5 6 if (s != "") { 7 if (s.length > 140) { 8 //文字数制限 9 alert("テキストが140字を超えています"); 10 } else { 11 //投稿画面を開く 12 url = "http://twitter.com/share?url=" + escape(url) + "&text='" + s +"'"; 13 window.open(url,"_blank","width=600,height=300"); 14 } 15 } 16}

JavaScript3行目の変数[s]を任意のテキストにすると動作するのですが、上記の記述にすると動作しません。
以上、改善方法を教えていただけないでしょうか。また、改善するのにTwitterAPIなどが必要な場合は補足いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/08/28 12:27

f (s.length > 140) { ←これは本当にこのように書かれていますか?コピペミスはありませんか?
m.ts10806

2018/08/28 12:40

現象が再現できなかったのですが、このhtmlはどのように実行されていますか?サーバー上でしょうか?ローカル上でしょうか?(URLがfile://となっていればローカルファイルでの実行です)
m.ts10806

2018/08/28 12:42

実際に送信してみたテキストなどもご提示いただければと思います。
guest

回答2

0

ちょっと書き方がまずそうなところだけ調整してみました

javascript

1function twitText() { 2 var s, url; 3 s = document.querySelector('[name="result_form"] [name="result"]').value; 4 url = document.location.href; 5 if (s != "") { 6 if (s.length > 140) { 7 alert("テキストが140字を超えています"); 8 } else { 9 url = "http://twitter.com/share?url=" + encodeURIComponent(url) + "&text='" + encodeURIComponent(s) +"'"; 10 window.open(url,"_blank","width=600,height=300"); 11 } 12 } 13}

投稿2018/08/28 12:38

yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

molgen46

2018/08/28 13:03

コメントありがとうございます。原因は他の方の回答で解決しましたが、ソース修正の参考にさせていただきます!
guest

0

ベストアンサー

私の方でローカルファイル実行(file:///)とWebサーバー上で実行(http)で試したのですが、現象が再現確認できませんでした。
GoogleChrome最新、FireFox最新で試しています。

幾つか試していただきたいので、下記、ご確認ください。

  • httpsにする

js

1url = "https://twitter.com/share? //以下略
  • 取得テキストを設定している部分で囲っているシングルクォートを除く

js

1url = "https://twitter.com/share?url=" + escape(url) + "&text=" + s ;

400エラーは送信したリクエストが不正(または不正な形式)であることを示すエラーです。

リクエストの作り方に何かしら問題があるのかもしれません。
送ろうとしているメッセージに不正な文言が紛れ込んでいたとか、
文字数制限をオーバーしたとか・・・。
いずれにしてもTwitterは140字という文字制限がありますし、ツイートに載せるURLも含まれているとしたら、打ち込めるコメントの文字数も更に短くなります。
その観点からも確認してみてください。urlを渡さないようにするとか、短いコメントだけ送信してみるとか。

投稿2018/08/28 12:52

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

molgen46

2018/08/28 13:00

>>送ろうとしているメッセージに不正な文言が紛れ込んでいた まさしく仰る通りで、取得したテキストの中身に半角の「%」が混ざっていたことが原因でした…!シングルクォートの箇所もご指摘の通り問題がありますので修正いたします。おかげさまで解決いたしました!この度はありがとうございました!!
m.ts10806

2018/08/28 13:03 編集

なるほど。urlエンコードにかかる部分でしたね。 その部分はyambejpさんが提示されているコードを参考にして修正するとうまいこと送信できるかもしれませんのでそちらも試してみてください。 yambejpさんの回答にあるように、任意で入力できる文字列をそのまま送信するのはセキュリティ的によろしくありませんので。
molgen46

2018/08/28 13:06

修正前のコードだとセキュリティ面で問題があるのですね。初心者なのでとても勉強になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問