HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0407
Dripexec命令等でhtmファイルのアンカーを指定して開く方法はあるでしょうか?8解決


Drip

リンク

2019/4/7(Sun) 22:11:05|NO.87106

こんにちは。ふと思ったのですが

exec dir_exe+"\\doclib\\hspprog.htm",16
とやればHSP付属のdoclib/hspprog.htmファイルをブラウザで開けるかと思いますが、
例えばhspprog.htmファイル内のクイックスタートの項を表示したい場合

exec dir_exe+"\\doclib\\hspprog.htm#QUICK_START",16
と書いても呼び出しエラーとなり開くことができません。
HSPではhtmファイル内の特定のアンカーを指定して開くことはできなかったでしょうか?
スマートな方法をご存知の方がいらっしゃいましたらぜひ教えていただければ幸いです。



この記事に返信する


MillkeyStars

リンク

2019/4/8(Mon) 00:14:46|NO.87109

外部ファイル(http及びhttps)については、アンカー移動ができたけど、ローカルのファイルではアンカー移動ができなかったよ。

ちなみに、ローカルのhtmlファイルを開く場合は、
exec "file:"+dir_exe+"\\doclib\\hspprog.htm#QUICK_START",16
として開いてね。(アンカー移動ができん・・・)



いののて

リンク

2019/4/8(Mon) 00:43:02|NO.87110

開きたいファイルにリダイレクトするように書いたHTMLを適当なところに保存して、
ブラウザに読み込ませるのがいいでしょう。


url=dir_exe+"\\doclib\\hspprog.htm#QUICK_START" strrep url, "\\", "/" html = "<html><head><meta http-equiv=\"refresh\" content=\"0;URL='file:///"+url+"'\"/></head></html>" notesel html notesave dir_cur+"\\tmp.html" exec dir_cur+"\\tmp.html", 16



Drip

リンク

2019/4/9(Tue) 22:40:10|NO.87125

こんにちは。ご返信有難うございます。

う〜ん、やっぱりスマートな方法は無い感じでしょうか。
リダイレクトや別途htmlファイルを書き出す方法は私もすぐに思いつきましたが、
単にhtmlファイルの特定の場所を開くためだけに転送やファイル生成を行うのは
好ましい解決方法に思えません。
現代ではリダイレクトは時に悪意を持って利用される場面も多く、
主要ブラウザでは安全なサイト以外でこの機能自体をブロックする動きもあるようです。
セキュリティ意識の高い方は昔から対策をされている方も多いかと思います。

アンカー指定でhtmlファイルを開く方法が無ければ無いで仕方がありませんが、
適切な方法をご存知の方がいらっしゃいましたら情報お待ちしております。



とあるプログラマ

リンク

2019/4/11(Thu) 00:14:48|NO.87131

最初に開くアプリケーションを指定してあげればいけたんですけど、そうすると環境依存になっちゃいますね… 実装するときは使用するアプリケーションのパスを設定等で指定する必要がでてきてしまいますね。

;使ってるブラウザのフルパスに変えてください↓ exec "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe \"file://"+dir_exe+"\\doclib\\hspprog.htm#QUICK_START\"",0



とあるプログラマ

リンク

2019/4/11(Thu) 00:31:53|NO.87133

FindExecutableA関数で関連付けられたアプリケーションの取得ができるみたいなので、コードはややこしくなりますが一応開くファイルのパスのみで可能でした。

#uselib "shell32" #func FindExecutable "FindExecutableA" int,int,int OpenPath=""+dir_exe+"\\doclib\\hspprog.htm" Anker="#QUICK_START" AppPath="" ;取得したパスが返る変数を用意 FindExecutable varptr(OpenPath),0,varptr(AppPath) ;関連付けられたアプリのパスを取得 // 成功すると32より上の値が返るのでそれ以下はエラー if stat<=32 : dialog "Error",1 : stop // file://を忘れずに exec AppPath+" file://"+OpenPath+""+Anker+"",0



Drip

リンク

2019/4/12(Fri) 20:36:51|NO.87145

とあるプログラマさん

ご返信有難うございます。これは凄いですね。
希望通りの正しいアンカーの開き方に見えます。
エラー処理も出来ていて素晴らしいです。

一点気になった点があるとすれば、
programFiles等にインストールされたようなプログラムから
そのフォルダ内のhtmファイルを今回の方法で開こうとすると、
権限の問題でブラウザ側がアクセス不能のエラーを吐きますね。
単純に exec dir_exe+"\\doclib\\hspprog.htm",16
で開いた場合と異なる作法の性でどうしても発生してしまう問題にも見えますが、
これを改善するには何かしらの抜け道を使わないといけなそうですね。

一先ず解決としたいと思いますが、
いやいや、権限の問題もクリアして開くお作法が…
という案をお持ちの方がいらっしゃいましたら是非お寄せいただければ幸いです^^;

ありがとうございました!



とあるプログラマ

リンク

2019/4/14(Sun) 17:56:57|NO.87169

>>Dripさん
確認してみましたが当環境ではChromeでもOperaでも正しく読めましたね。Program Files内ということなので、もしかすると開くファイルパスにスペースが含まれているためかと思われます。ファイルパスの前後にダブルクォーテーション「"」をつけてみてください。
サンプル

#uselib "shell32" #func FindExecutable "FindExecutableA" int,int,int dialog "htm",16 OpenPath="\""+refstr+"\"" Anker="#QUICK_START" AppPath="" ;取得したパスが返る変数を用意 FindExecutable varptr(OpenPath),0,varptr(AppPath) ;関連付けられたアプリのパスを取得 // 成功すると32より上の値が返るのでそれ以下はエラー if stat<=32 : dialog "Error",1 : stop // file://を忘れずに exec AppPath+" file://"+OpenPath+""+Anker+"",0



Drip

リンク

2019/4/16(Tue) 07:28:14|NO.87183

とあるプログラマさん
ご指摘有難うございます!スペースの方でしたか(・・;
ProgramFiles上でアクセスできないファイルはいつも権限エラーだったものですっかり思い込みでした。
ダブルクォーテーションで囲ったところ正常に表示されるようになったことを確認いたしました。
重ね重ねご丁寧に有難うございました!



ONION software Copyright 1997-2018(c) All rights reserved.