none
JavaScriptのエラー RRS feed

  • 質問

  • いつもお世話になります。Windows7 VisualStudio2010 ExpressEditioで開発しています。

    C#でブラウザを作っていて、JavaScriptのエラーに困っています。Javascriptのエラーです。

    これは、http://blog.btmup.com/javascript/ie6-ie7-expected-identifier-string-or-number-script-error.htmlによると、

    [,]によるエラーのようです。

    たしかにそのjavascriptをダウンロードして見ると、{strip:/<[a-zA-Z\/][^<>]*>/g,clean:/[0-9.(),;:!?%#$¿'"_+=\\/-]+/g,count:/\S\s+/g,}というように、/gのあとに[,]があり、これが問題を起こしていると思われます。

    これをオミットする方法をご教示いただけないでしょうか。

    これまでにやってみたのは、

    (1)webBrowser.ScriptErrorsSuppressed = true;

    これを設定すると、エラーは出なくなるが、Basic認証のウィンドウも出なくなって、結局そのページにアクセスできない。

    (2)DocumentCompletedでスクリプトを削除してみる。

    HtmlElementCollection scripts = webBrowser.Document.GetElementsByTagName("script");

    foreach (HtmlElement script in scripts) if (script.GetAttribute("src").Contains("word-count.jp"))  

    script.SetAttribute("src","");

    だめ。

    DocumentCompleted以前にエラーが発生。

    (3)private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)で同様。

    だめ。エラーが発生。

    (4)private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e) {で同様。

    だめ。エラーが発生。

    という状態で、手詰まりになっています。

    アドバイスいただければと存じます。

    2014年6月6日 10:01

回答

  • そもそもコンテンツを編集して対処しようとするアプローチはどうなんでしょう。コンテンツ側に変更があった場合はどうするつもりですか?
    # ただ動けばそれでいいとことであればすみません、無駄な指摘でした。

    WebBrowserコントロールを使われていると思いますが、これはIE7相当のWebブラウザーを提供する機能です。必要であればBrowser Emulationのレジストリ設定を行うことでIE8以降に切り替えることができます。

    • 回答としてマーク skyrabbit 2014年6月8日 2:17
    2014年6月7日 0:35

すべての返信

  • > たしかにそのjavascriptをダウンロードして見ると、
    > {strip:/<[a-zA-Z\/][^<>]*>/g,clean:/[0-9.(),;:!?%#$¿'"_+=\\/-]+/g,count:/\S\s+/g,}
    > というように、/gのあとに[,]があり、これが問題を起こしていると思われます。

    それは正規表現のパターンのようで、そもそも、参考にされている URL の記事の JavaScript のカンマ ( , ) とは何も関係ないように見えます。

    考え違い、見当違いではないですか? もし、そうでなかったら失礼しました。


    • 編集済み SurferOnWww 2014年6月6日 11:40 誤記訂正:CSS ⇒ JavaScript
    2014年6月6日 10:26
  • SurferOnWwwさん、早速のご回答ありがとうございます。
    おっしゃるように、それほどwebに詳しいわけではないので、ピント外れなことをしているかもしれません。
    しかも、よく見ると、g,が複数ありますね。
    補足します。
    エラーは、「識別子、文字列または数がありません」というものでした。これで検索して、該当のページを発見しました。
    エラーのときに行数と文字数を表示してくれたので、そのJavaScriptを見ると、最後のg,}の[,]がその文字に相当するようでした。
    おっしゃるように、わたしもこれは、正規表現の[,]だろうとは思ったのですが、指定の最後にあることから、「識別子、文字列または数がありません」というエラーにつながるのだろうと推測しました。
    というわけで、あらためて、これをオミットする方法のヒントでもいただけないでしょうか。

    JavaScriptはそれほど堪能ではないのですが、

    {strip:/<[a-zA-Z\/][^<>]*>/g,clean:/[0-9.(),;:!?%#$¿'"_+=\\/-]+/g,count:/\S\s+/g,}

    を分解すると、たぶん、

    { 開始
    strip: コマンド
    / 正規表現の開始
    <[a-zA-Z\/][^<>]*> 正規表現
    / 正規表現の終了
    g globalのg
    , コマンドの区切り
    clean: コマンド
    / 正規表現の開始
    [0-9.(),;:!?%#$¿'"_+=\\/-]+ 正規表現
    / 正規表現の終了
    g globalのg
    , コマンドの区切り
    count: コマンド
    / 正規表現の開始
    \S\s+ 正規表現
    / 正規表現の終了
    g globalのg
    , コマンドの区切り。このあとに、コマンドがないので、このカンマで「識別子、文字列または数がありません」とエラーになる。
    } 終了
    と理解しています。

    • 編集済み skyrabbit 2014年6月6日 23:56
    2014年6月6日 23:50
  • そもそもコンテンツを編集して対処しようとするアプローチはどうなんでしょう。コンテンツ側に変更があった場合はどうするつもりですか?
    # ただ動けばそれでいいとことであればすみません、無駄な指摘でした。

    WebBrowserコントロールを使われていると思いますが、これはIE7相当のWebブラウザーを提供する機能です。必要であればBrowser Emulationのレジストリ設定を行うことでIE8以降に切り替えることができます。

    • 回答としてマーク skyrabbit 2014年6月8日 2:17
    2014年6月7日 0:35
  • ご示唆いただきありがとうございます。
    ご示唆いただいたレジストリの登録で、エラーを消すことができました。

    おっしゃるように、コンテンツを編集してアプローチするというのは、あまりよい解決方法ではないと思っています。
    ただ、じっさいには、これはクライアントのサイトで、そちらに対してすでにアプローチはしたのですが、解決は困難ということで却下されていました。
    そこで次善の策として、いろいろあがいていた感じです。
    情報ありがとうございました。

    2014年6月8日 2:20