TinyMCEのリンク機能でIEのみエラー  【解決済み】

質問全般・改善要望
返信する
manmaru216
メンバー
メンバー
記事: 14
登録日時: 2010年6月11日(金) 17:53

TinyMCEのリンク機能でIEのみエラー  【解決済み】

投稿記事 by manmaru216 »

お世話になっております。
先月「テンプレート変数のimageタイプでstack overflow? 」のトピックでお世話になった者です。その節は本当にありがとうございました。
そのときの問題とまったく無関係ではないかもしれない問題なのですが、またどうしても解決法がわからず投稿いたします。

今回はIEのみの現象で、FireFoxその他のモダンブラウザでは問題なく動いています。
TinyMCEで文字列選択→リンクアイコンから「リンクの挿入・編集」立ち上げ→参照ボタンをクリック
のあたりのタイミングで、

'undefined'はNullまたはオブジェクトではありません。
index.php ライン:1070
http://xxxxx/manager/index.php?id=273&a=27

のエラーが投稿画面側に出ます。エラーを閉じればリンクはできるのですが、他のユーザーも使うところになるのでなるべくIEでエラーなく動作できればと思っています。
度々恐れ入ります、よろしくお願いします。。

[サーバ]
 ホスト&契約タイプ:さくらの専用サーバRAIDプランXeonモデル
 ネットワーク:インターネット
  Webサーバ:Apache2.2.3
 PHPバージョン:5.2.13
 phpinfo
 http://www.senpro.jp/phpinfo.php
 DB:MySQL 5.1.43
[modx]
 バージョン:1.0.2J、1.0.4Jで同じ挙動を確認
[クライアント]
 ブラウザ:IE:上記のとおり
       Firefox他:問題なし
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by yama »

http://xxxxx/manager/index.php?id=273&a=27
上記のURLをブラウザで実際にアクセスしてhtmlのソースを開き、1070行目付近に何が書いてあるかを教えていただけますでしょうか。ここに何が書いてあるかは、利用しているプラグインによって環境ごとに異なります。前回の件も原因が分からず対症療法で終わってるようですが、同じようなことが原因のように見えます。

グローバル設定の「管理画面操作のリファラチェック」が「はい」になっていると開くことができないかもしれませんので、その場合は「いいえ」にしてからURLを開いてみてください。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by sama55 »

下が原因っぽい感じがします。詳しい原因や対処方法は分からないのですが、リソースブラウザを開く時は都合3枚のウィンドウが表示されてウィンドウの前後関係が入れ替わるので、フォーカスを移す処理がタイミング(条件)的に無理があるのかもしれません。エラーを誘発する行をコメントアウトするとエラーは出なくなるようです。コメントアウトしても一見問題ないように見えますが、他の問題を引き起こす可能性がありそうな気がしました。 >> どうでしょね?
(フォーカスを移す処理なんで、そう大きな問題は出ない気はしますが・・・)

assets/plugins/tinymce/js/modx_fb.js.inc (L46)
//if (window.focus) {windowManager.focus()}

ちなみに、ブラウザのスクリプトエラーに対する扱い方が違うためIEだけの現象に見えますが、実際にはFFなどでも発生してる気がします。
manmaru216
メンバー
メンバー
記事: 14
登録日時: 2010年6月11日(金) 17:53

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by manmaru216 »

yamaさん、sama55さん、返信ありがとうございます。

またソースを提示せずすみません。。

コード: 全て選択

function modx_fb (field_name, url, type, win) {
    if (type == "media") {type = win.document.getElementById("media_type").value;}
	var cmsURL = "/manager/media/browser/mcpuk/browser.php?Connector=/manager/media/browser/mcpuk/connectors/php/connector.php&ServerPath=/&editor=tinymce&editorpath=/assets/plugins/tinymce/";
	switch (type) {
		case "image":
			type = "images";
			break;
		case "media":
		case "qt":
		case "wmp":
		case "rmp":
			type = "media";
			break;
		case "shockwave":
		case "flash":
			type = "flash";
			break;
		case "file":
			type = "files";
			break;
		default:
			return false;
	}
	if (cmsURL.indexOf("?") < 0) {
	    //add the type as the only query parameter
	    cmsURL = cmsURL + "?type=" + type;
	}
	else {
	    //add the type as an additional query parameter
	    // (PHP session ID is now included if there is one at all)
	    cmsURL = cmsURL + "&type=" + type;
	}
 
	var windowManager = tinyMCE.activeEditor.windowManager.open({
	    file : cmsURL,
	    width : screen.width * 0.7,  // Your dimensions may differ - toy around with them!
	    height : screen.height * 0.7,
	    resizable : "yes",
	    inline : 0,  // This parameter only has an effect if you use the inlinepopups plugin!
	    close_previous : "no"
	}, {
	    window : win,
	    input : field_name
	});
	if (window.focus) {windowManager.focus()}
	return false;
}

のwidth:screen.width*0.7の行のようです。

グローバル設定の「管理画面操作のリファラチェック」を「いいえ」にしたところ、同じ状態でした。


sama55さんの方法、さっそくコメントアウトしたところ、ファイルの一覧ウィンドウが後ろに出たりはしますが、エラーが出なくなりました。
他の問題も今のところ大丈夫そうだと思います。もし何か見つけましたらこのトピックに追記いたします。

なるほど、他のブラウザでも表に出ないだけで発生はしているんですね。
前回の件も何か他のところで原因があるのかもしれませんが、まずは解決にさせていただきます。ありがとうございます。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by yama »

その部分だとすると
var windowManager = tinyMCE.activeEditor.windowManager.open()
この書き方自体が変な気がしますね。JavaScriptあまり詳しくないんで自信ないですけど、これはこれで正しいのかな?
解決の確約はできないですが機会があれば調べてみます。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by sama55 »

yama さんが書きました:その部分だとすると
var windowManager = tinyMCE.activeEditor.windowManager.open()
この書き方自体が変な気がしますね。JavaScriptあまり詳しくないんで自信ないですけど、これはこれで正しいのかな?
こう書いてもエラーは出なくなるようです。自分のIEは8ですが、エラーが出なくなるのと同時に発生する副作用(manmaru216さんの仰るウィンドウが後ろに隠れる)は発生せずにちゃんとリソースウィンドウが前に出ます。下の修正でどうでしょね? >> manmaru216さん

コード: 全て選択

	//var windowManager = tinyMCE.activeEditor.windowManager.open({
	tinyMCE.activeEditor.windowManager.open({

コード: 全て選択

	//if (window.focus) {windowManager.focus()}
	if (window.focus) {tinyMCE.activeEditor.windowManager.focus()}
manmaru216
メンバー
メンバー
記事: 14
登録日時: 2010年6月11日(金) 17:53

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by manmaru216 »

yamaさん、sama55さん、ありがとうございます。
sama55 さんが書きました:

コード: 全て選択

	//var windowManager = tinyMCE.activeEditor.windowManager.open({
	tinyMCE.activeEditor.windowManager.open({

コード: 全て選択

	//if (window.focus) {windowManager.focus()}
	if (window.focus) {tinyMCE.activeEditor.windowManager.focus()}
こちらを試しましたところ、私もIE8ですが、同じところで

「オブジェクトでサポートされていないプロパティまたはメソッドです。」

というエラーになりました。
とりあえず、前のコメントアウトだけのものに戻してみました。
すみません、お手数おかけしてます。。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by sama55 »

こちらの環境と現象が違いますね。
RTEはしつこくキャッシュが働くので、ソースの変更後は一旦ログアウトしてログインしなおしたり、クライアントキャッシュを消す必要があったりしますが、これまでの変更で挙動が変わったのですから、その辺はちがいますよねー
問題の根本解決にはなりませんが、インターネットのセキュリティ設定を変えてると軽度なスクリプトエラーでも停止することがあることは聞いたことありますが・・・
あとは、IEの開発者ツールで追いかけてみるとか・・・
http://www.atmarkit.co.jp/fwin2k/win2kt ... e8dvt.html
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by yama »

なんとなくですが一般的なプログラミング言語の感覚で考えるとオブジェクト(インスタンス?)を素直な(と思える)形で作ってみるとよさそうな気がします。

var windowManager = tinyMCE.activeEditor.windowManager.open()
これだとopenメソッドを実行した状態をインスタンス化(?)しようとしているように見えますが、しかもwindowManagerって名前は使っていいのかなという気もするので(問題ない?)、

var wm = tinyMCE.activeEditor.windowManager;
とした後で
wm.open()
を実行して、あとで出てくるfocusメソッドでもこれを使って
if (window.focus) {wm.focus();}
こんなふうにすると順当なのかな?という気がします・・誰かJavaScript詳しい人いないかな orz
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by sama55 »

ソースが圧縮されてるので追いにくいんですよね(メソッドがさっぱり)。。。本家フォーラムで突っ込んでみましょうか?
おっと・・・その前に本家版の再現性も確認せねば。。。 → 1.0.4でも現象を確認

ここに投げてみました。
http://modxcms.com/forums/index.php/topic,51350.0.html

JIRAに投げてくれ、とのことなのでこちらに。
http://svn.modxcms.com/jira/browse/TINYMCE-70
manmaru216
メンバー
メンバー
記事: 14
登録日時: 2010年6月11日(金) 17:53

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by manmaru216 »

sama55さん、yamaさん、いろいろありがとうございます。
yama さんが書きました: var wm = tinyMCE.activeEditor.windowManager;
とした後で
wm.open()
を実行して、あとで出てくるfocusメソッドでもこれを使って
if (window.focus) {wm.focus();}
こちら、試してみたところ、エラーが出なくなりました。
一覧のウィンドウは、どうもリンクの挿入・編集ウィンドウの前に出たり後ろに出たりしてます。

なるほど、本家版から起こる現象だったんですね。。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by yama »

自分でもよく理解できてないようなグダグダな説明が通じてよかったです orz

if (window.focus) {wm.focus();}
これってそもそもどういう意味なんでしょ?wm.focus();だけでいいような気もするのですが・・
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: TinyMCEのリンク機能でIEのみエラー

投稿記事 by yama »

お待たせです。修正したので試してみてください。やってることは上記で説明したとおりです。これで問題なければ次のバージョンアップで積み込みます。「リンクの挿入・編集ウィンドウの前に出たり後ろに出たりしてます」ってことなので、まだ解決されてない問題があるみたいですが。そもそもこのfocusって最初から意味ないんじゃないかという・・
添付ファイル
modx_fb.js.zip
(748 バイト) ダウンロード数: 347 回
返信する