中級プログラマの自宅でPHP ブログ

自宅用ポータルシステム「MyHome Portal」をオープンソースで公開。MyHome Portalの説明とエンハンス情報。

Chromeを既定のブラウザにできない理由

Google Chromeは、IEに比べてはるかに高速で良いのですが、Google Chromeを既定のブラウザにはしていません。

その一番の理由は、文字列のコピー&ペーストで、余分なスペースや改行が付いてしまうことです。

認証が必要なWebサイトのID管理には、MyHome PortalのID管理を使っていますが、IDやパスワードをコピーする時に、英数字混在&記号交じりの文字列をコピーするために、トリプルクリックを使いますが、Google Chromeでは、なぜか元の文字列に存在しないスペースや改行が付いてしまいます。

MyHome PortalのID管理では文字列は、コピー&ペーストしやすいように<table><tr><td>で囲んでいますが、Google Chromeではペースト先にスペースや改行が入ってしまいます。

<div>や<span>で囲んでも駄目です。IEでも<div>や<span>では余分な範囲を選択してしまいます。

下にサンプルを載せました。Google Chromeで試してみてください。

改善策をご存知の方、教えてください。

<table><tr><td>abc@123#xyy</td></tr></table>

<div>abc@123#xyy</div>

<span>abc@123#xyy</span>

【table】

abc@123#xyy

【div】

abc@123#xyy

【span】

abc@123#xyy

【2010/3/5 追記】

※この問題は、Livedoor KnowledgeにてBLUEPIXYさんから素晴らしい解決策をいただきました。

http://knowledge.livedoor.com/44359

【2010/3/8 追記】

Ver.2.62でこれを適用しましたが、Firefoxでは不具合が発生することが判明。Ver.2.63でChromeのみ、このoncopy処理を適用するようにしました。

http://ok2nd.blog87.fc2.com/blog-entry-203.html

BLUEPIXYさんからの解決策を転載させていただきます。

oncopyを使って以下のスクリプトで処理します。

<head>~</head>に、

<script type="text/javascript">

function copy(e){

var text = window.getSelection()+"";

text=text.replace(/(.+)\s*/,"$1");

input = document.createElement("input");

input.hidden = true;

input.value = text;

document.body.appendChild(input);

input.select();

try {

success = document.execCommand("copy", false, null);

} catch (ex) {

success = false;

} finally {

document.body.removeChild(input);

}

return false;

};

</script>

body 部分で、oncopy にcopy() を割り付け

<table oncopy="copy(event);return false">

<tr><td>abc@123#xyyz</td></tr>

</table><br />