このページは、JavaScript+PHPで作っている「ホームページについての日記」をHTML版に直したページです。
GoogleやYahooなどの検索エンジンに拾われてもかまわない内容だけを書いてます。検索エンジンに拾われたく内容は書いてません。
最新のページはあるていど項目別にわかれてます。
function JSON_POST (Object) { var POST_Object = new Object; for(key in Object){ try { if (!Object[key].length) { POST_Object[key] = ""; } else { POST_Object[key] = Object[key]; } } catch (e) { POST_Object[key] = ""; } } return POST_Object; }
JSON.stringify()
してあげれば、ブラウザに関係なくPHPにJSONのデータを送れるわけだ。POSTをひとつにまとめられるのは、かなりうれしい。JSON.parse()
を使いたいので、この辺りはがんばらない。素直にJSONの関数を利用する。現状のWebKitはcolumnを使い分割した場合、分割された右の領域に表示されたDOMオブジェクトのoffsetがちゃんと取得できないようです。
2010年のの釣り日記で、a要素のoffsetを取得して、その位置に画像を表示しているのですが、webKitは上手く表示しません。
表示するのを気長に待ちましょう。
「戻ってしまう」が曲者で、「指定したのに反映しない」を意味している思います。(CSS フラグメントの構文はAppendix G. Grammar of CSS 2.1,Selectors Level 3に記載されてます。
セレクタの重みでスタイルの反映順が変わってしまうので、「勘違い」で反映していないと思っているのかもしれません。
Fxならば、DOM Inspector で確認できるので、どのstyleが適応されているのか覗いてみましょう。
webkitでも、transformToFragmentは動きます。createDocumentのloadができないだけです。
WebKit対応版-XSLTProcessorで紹介してます。
WebKitのXSLTProcessor()は、XSLTがinclude出来ないようです。その辺を考慮する必要があると思います。
webkitは、CreateDocumentのloadができません。したがって、XMLHttpRequest()を使って、GETメゾッドでXMLファイルにアクセスして、responseXMLでXML文書を取得します。
WebKit対応版-XSLTProcessorで使ってます。
IEを使っている人はまだ考えなくて良いです。作ってみたところで使えないですから。
動きがある図を作りたいならcanvas。マウスの動きによって説明の表示などはSVG JavaScriptとしています。
canvas要素を使ってみた。で話題にはしてます。
私のページがトップにきたんですね。知りませんでした。
ポインタの位置 - Canvasのoffset位置 - スクロール量で計算します。
canvas要素に「お絵かき」機能。で書いてます。
xmlns:dcterms="http://purl.org/dc/terms/"
を追加する。後は、必要な要素を追加していく。dcterms:title(正式タイトル)
、dcterms:tableOfContents(リソースの目次)
、dcterms:abstract(リソースの要約)
を定義してみたが、いまいちです。iframeObject.postMessage(JSON)
する。受け取った側は、JSON2のモジュールを使用してJavaScriptの連想配列に戻せばよいわけだ。「PHPのsimplexmlでXPathを使いたい。」みたいなことでしょう。「XPathがわかる」ことが前提となります。
registerXPathNamespace
は、simplexmlで読み込んだXML文書に名前空間を指定するコードです。XML文書で言うところの「xmlns」にあたります。
例えば、ATOMの名前空間を指定する場合、XML文書ならば、xmlns:atom="http://www.w3.org/2005/Atom"
と書きます。
これを、simplexmlで指定する場合に、registerXPathNamespace
を使います。
$xml = simplexml_load_file ($fileURL); $xml->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
こうすると、XPathが使えるようになります。entryのtitleを取得したいなら、$entryTitle = $xml->xpath('//atom:entry/atom:title');
と書けば、entryのtitleを取得できます。
ただし、XPathで取得した要素は、ReadOnlyになります。addChild
などはできないので注意が必要です。
CSS3で楕円を使いたいなら、border-radius
を使うと思うのですが……。translation
は要素を回転させることの出来る指定です。
border-radius
で楕円を作るのは、ちょっと工夫が必要だと思います。
JavaScriptでsend nullする場合は、XMLHttpRequestで送信した使った場合だと思います。その場合onreadystatechangeプロパティーを使って、状態を確認したらよいとおもいます。
readyStateが「4」でstatusが「200」の場合通信が成功しています。readyStateが「4」でstatusが「200」以外の通信の場合statusを表示をさせます。
あとは、statusの情報で判断してください。停止しているとは思えません。
Microsoft.~は、IE4~IE6にかけてXMLを扱うためのActiveXObjectです。IE6以降は、MSXML.~が使えますのでそちらを使うようにしましょう。
Microsoft.~でサンプルが書いてあったりするページは、古い情報を元に作られているので困ったことが起きるかもしれません。
obj.addEventListener("click",function(){XMLTest("test.xml")},false);
と無名関数を使えば引数は渡せます。
addEventListener
は、イベントオブジェクトは取得できるので、targetでDOMオブジェクトを取得して属性などに引数を忍ばせて使うことも出来ます。
まぁ、やりかたしだいです。個人的には無名関数を使いたくないです。
重ねた下の画像にaddEventListenerでクリックイベントを適応。重ねた上の画像にDispatchEVENTで重ねた下の画像のクリックイベントを動かすイベントを適応。
それで、下のイベントはうごきます。
split
して行単位にします。split
して、項目ごとにします。この手順を踏めば、Fxに限らず使えます。
<h2>20cmに足りないハゼ</h2> <p>七北川河口近くの浅瀬</p> <p>2010-10-24</p> <img src="http://musimusi.g.ribbon.to/img/img/20101024haze.jpg"/>なソースをJavaScriptで生成する。
-- WebKit -- -webkit-border-image: url(../css/img/pin_s.png)20 / 20px repeat repeat; -- Gecko -- -moz-border-image: url(../css/img/pin_s.png)20 / 20px repeat repeat; -- Opera -- -o-border-image: url(../img/pin_s.png)20 20 20 20 / 20px 20px 20px 20px repeat repeat; -- CSS3 -- border-image: url(../css/img/pin_m.png)30 30 30 30 / 22px 22px 22px 22px repeat repeat;
-- WebKit -- -webkit-border-image: url(../css/img/scotch-tape.png) 2 8 2 5 / 2px 8px 2px 5px; -- Gecko -- -moz-border-image: url(../css/img/scotch-tape.png) 2 8 2 5 / 2px 8px 2px 5px; -- Opera -- -o-border-image: url(../css/img/scotch-tape.png) 2 8 2 5 / 2px 8px 2px 5px; -- CSS3 -- border-image: url(../css/img/scotch-tape.png) 2 8 2 5 / 2px 8px 2px 5px;
-- WebKit -- -webkit-box-shadow: 10px 10px 10px #99eeFF; -- Gecko -- -moz-box-shadow: 10px 10px 10px #99eeFF; -- CSS3 Opera -- box-shadow: 10px 10px 10px gray;
-- WebKit -- -webkit-border-radius: 10px; -- Gecko -- -moz-border-radius: 10px; -- CSS3 Opera -- border-radius: 10px;
text-shadow: 5px 5px 10px #808080;
-- WebKit -- background: -webkit-gradient(linear, left top, right bottom, from(rgb(255,222,255)), to(#ffffdd)); -- Gecko -- background: -moz-linear-gradient(top, rgb(255,222,255), #ffffdd); -- CSS3 -- background: linear-gradient(top, rgba(255,222,255,0), #ddffdd);
-- WebKit -- -webkit-transform: rotate(-12deg); -- Gecko -- -moz-transform: rotate(-12deg); -- Opera -- -o-transform: rotate(-12deg); -- CSS3 -- transform: rotate(-12deg);
-- WebKit -- -webkit-column-count: 2; -webkit-column-gap: 3em; -webkit-column-rule: 1px solid #99cc99; -- Gecko -- -moz-column-count: 2; -moz-column-gap: 2em; -moz-column-rule: 1px solid #99cc99; -- CSS3 -- column-count: 3; column-gap: 3em; column-rule: 1px solid #cc99ff;
display-BOX display: -moz-box; display: -webkit-box; display: box;
-moz-box-flex:1; -webkit-box-flex:1; box-flex:1;
-moz-box-flex-group:1; -webkit-box-flex-group:1; box-flex-group:1; (未対応かも)
function XML_Search (XMLData,Retrieval,DataSet) {//XMLData←XMLHttpRequestオブジェクト,Retrieval←検索対象オブジェクト,DataSet←取得データオブジェクト var xmlDoc = XMLData.responseXML; var NS_object = new Object(); var NS_AttrObject = new Object(); var Result_object = new Array(); var Result_cnt = 0; // データ取得用の要素の取得 NS_object.XMLObject = xmlDoc; NS_object.NS = Retrieval[0].NS; NS_object.Prefix = Retrieval[0].Prefix; NS_object.TagName = Retrieval[0].TagName; var TecName_Object = ElementObject.GetNS(NS_object); var DATA_CK = false; // 検索対象要素の取得 for (TecName_Cnt=0; TecName_Cnt<TecName_Object.length; TecName_Cnt++){ var Extraction_FLG = false for (Retrieval_Cnt=1; Retrieval_Cnt<Retrieval.length; Retrieval_Cnt++){ // 検索対象要素から値を取得 if (Retrieval[Retrieval_Cnt].AttributeFlg) { NS_AttrObject.NS = Retrieval[Retrieval_Cnt].NS; NS_AttrObject.Prefix = Retrieval[Retrieval_Cnt].Prefix; NS_AttrObject.AttrName = Retrieval[Retrieval_Cnt].AttrName; NS_AttrObject.XMLObject = TecName_Object[TecName_Cnt]; var Comparison_Str = AttributeObject.GetNS(NS_AttrObject); } else { NS_object.NS = Retrieval[Retrieval_Cnt].NS; NS_object.Prefix = Retrieval[Retrieval_Cnt].Prefix; NS_object.TagName = Retrieval[Retrieval_Cnt].TagName; NS_object.XMLObject = TecName_Object[TecName_Cnt]; var TEXT_Object = ElementObject.GetNS(NS_object); var WK_Comparison_Str = TextObject.Get(TEXT_Object[0]); var Comparison_Str = WK_Comparison_Str[0]; } // 検索対象文字かチェック if (Retrieval[Retrieval_Cnt].Name != "") { if (Retrieval[Retrieval_Cnt].CheckBox) { if (lastIndex(Comparison_Str, Retrieval[Retrieval_Cnt].Name)) { Extraction_FLG = true; } else { Extraction_FLG = false; break; } } else { if (Comparison_Str == Retrieval[Retrieval_Cnt].Name) { Extraction_FLG = true; } else { Extraction_FLG = false; break; } } } } // データの取得 var WK_TecName_Object = TecName_Object[TecName_Cnt]; var AttrName_Tag = ""; if (Extraction_FLG) { Result_object[Result_cnt] = new Array(); DATA_CK = true; for (DataSet_Cnt=0; DataSet_Cnt<DataSet.length; DataSet_Cnt++){ // Elementからテキストを取得 if (DataSet[DataSet_Cnt].DomSetFlg) { NS_object.NS = DataSet[DataSet_Cnt].NS; NS_object.Prefix = DataSet[DataSet_Cnt].Prefix; NS_object.TagName = DataSet[DataSet_Cnt].TagName; NS_object.XMLObject = WK_TecName_Object; var TEXT_Object = ElementObject.GetNS(NS_object); if (DataSet[DataSet_Cnt].TagName == "li") { WK_TecName_Object = TEXT_Object; } else { WK_TecName_Object = TEXT_Object[0]; } AttrName_Tag = AttrName_Tag + DataSet[DataSet_Cnt].TagName; } // DOMの階層を下げる if (DataSet[DataSet_Cnt].DomGetFlg) { NS_object.NS = DataSet[DataSet_Cnt].NS; NS_object.Prefix = DataSet[DataSet_Cnt].Prefix; NS_object.TagName = DataSet[DataSet_Cnt].TagName; NS_object.XMLObject = WK_TecName_Object; var TEXT_Object = ElementObject.GetNS(NS_object); Result_object[Result_cnt][DataSet[DataSet_Cnt].TagName] = TextObject.Get(TEXT_Object[0]); var WK_TecName_Object = TecName_Object[TecName_Cnt]; } // 属性からテキストを取得 if (DataSet[DataSet_Cnt].AttributeFlg) { if (!WK_TecName_Object.length) { NS_AttrObject.NS = DataSet[DataSet_Cnt].NS; NS_AttrObject.Prefix = DataSet[DataSet_Cnt].Prefix; NS_AttrObject.AttrName = DataSet[DataSet_Cnt].AttrName; NS_AttrObject.XMLObject = WK_TecName_Object; Result_object[Result_cnt][DataSet[DataSet_Cnt].AttrName] = AttributeObject.GetNS(NS_AttrObject); } else { for (WTN_Cnt=0; WTN_Cnt<WK_TecName_Object.length; WTN_Cnt++){// RDFコンテナに対応 NS_AttrObject.NS = DataSet[DataSet_Cnt].NS; NS_AttrObject.Prefix = DataSet[DataSet_Cnt].Prefix; NS_AttrObject.AttrName = DataSet[DataSet_Cnt].AttrName; NS_AttrObject.XMLObject = WK_TecName_Object[WTN_Cnt]; var AttrNameNo = DataSet[DataSet_Cnt].AttrName + WTN_Cnt; Result_object[Result_cnt][AttrNameNo] = AttributeObject.GetNS(NS_AttrObject); Result_object[Result_cnt][AttrName_Tag] = WTN_Cnt + 1; } AttrName_Tag = ""; } var WK_TecName_Object = TecName_Object[TecName_Cnt]; } } Result_cnt = Result_cnt + 1; } } if (DATA_CK) { return Result_object; } else { return false; } }
var XML_Retrieval = new Array(); XML_Retrieval[0] = new Object(); XML_Retrieval[0].NS = "http://www.geocities.jp/sendaituri/owl/fncmjp.xml#" XML_Retrieval[0].Prefix = "観察"; XML_Retrieval[0].TagName = "学名"; XML_Retrieval[1] = new Object(); XML_Retrieval[1].NS = "http://www.geocities.jp/sendaituri/owl/fncmjp.xml#" XML_Retrieval[1].Prefix = "観察"; XML_Retrieval[1].AttrName = "標準和名"; XML_Retrieval[1].AttributeFlg = true; XML_Retrieval[2] = new Object(); XML_Retrieval[2].NS = "http://www.geocities.jp/sendaituri/owl/fncmjp.xml#" XML_Retrieval[2].Prefix = "観察"; XML_Retrieval[2].TagName = "分類"; XML_Retrieval[2].AttributeFlg = false; var Form_obj = ElementObject.ID("zform"); XML_Retrieval[1].Name = Form_obj.zselect1.value; XML_Retrieval[1].CheckBox = Form_obj.check1.checked; XML_Retrieval[2].Name = Form_obj.zselect2.value; XML_Retrieval[2].CheckBox = Form_obj.check2.checked;
var XML_Setting = new Array(); XML_Setting[0] = new Object(); XML_Setting[0].NS = "http://www.geocities.jp/sendaituri/owl/fncmjp.xml#" XML_Setting[0].Prefix = "観察"; XML_Setting[0].AttrName = "標準和名"; XML_Setting[0].DomSetFlg = false; XML_Setting[0].DomGetFlg = false; XML_Setting[0].AttributeFlg = true; XML_Setting[4] = new Object(); XML_Setting[4].NS = "http://www.geocities.jp/sendaituri/owl/fncmjp.xml#" XML_Setting[4].Prefix = "観察"; XML_Setting[4].TagName = "画像"; XML_Setting[4].DomSetFlg = true; XML_Setting[4].DomGetFlg = false; XML_Setting[4].AttributeFlg = false; XML_Setting[5] = new Object(); XML_Setting[5].NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" XML_Setting[5].Prefix = "rdf"; XML_Setting[5].TagName = "Bag"; XML_Setting[5].DomSetFlg = true; XML_Setting[5].DomGetFlg = false; XML_Setting[5].AttributeFlg = false; XML_Setting[6] = new Object(); XML_Setting[6].NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" XML_Setting[6].Prefix = "rdf"; XML_Setting[6].TagName = "li"; XML_Setting[6].DomSetFlg = true; XML_Setting[6].DomGetFlg = false; XML_Setting[6].AttributeFlg = false; XML_Setting[7] = new Object(); XML_Setting[7].NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" XML_Setting[7].Prefix = "rdf"; XML_Setting[7].AttrName = "resource"; XML_Setting[7].DomSetFlg = false; XML_Setting[7].DomGetFlg = false; XML_Setting[7].AttributeFlg = true;
*1、*2はいずれか一つを指定。AttributeFlgを指定した場合、AttrNameを指定すること
function include_JS (IncludFile) { XMLhttp[IncludFile.Name] = xmlcreateXMLHttp(); IncludeFile = IncludFile.URL IncludFile.Name ".js"; if (XMLhttp[IncludFile.Name] != false) { XMLhttp[IncludFile.Name].open("GET",IncludeFile,false); XMLhttp[IncludFile.Name].send(""); return XMLhttp[IncludFile.Name].responseText; } } var IncludeJS = include_JS;
var JS_ReadXmlLC = false; var IncludeFile = new Object(); IncludeFile.Name = "XXXXX"; IncludeFile.URL = "http://musimusi.g.ribbon.to/JavaScript/"; JS_ReadXmlLC = IncludeJS(IncludeFile); do{ }while(JS_ReadXmlLC == false); eval(JS_ReadXmlLC);
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:rss="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:wot="http://xmlns.com/wot/0.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:wn="http://xmlns.com/wordnet/1.6/" xmlns:doas="http://purl.org/net/ns/doas#" xmlns:ex="http://example.org/stuff/1.0/" xmlns:cc="http://creativecommons.org/ns#" xmlns:ccm="http://web.resource.org/cc/" xmlns:fncm="http://www.geocities.jp/sendaituri/owl/fncm.xml#" exclude-result-prefixes=" xsl rdf atom rss dc dcterms wot foaf wn doas ex"> <xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="application/json"/> <xsl:template match="/"> <xsl:text>{"SerchData":[</xsl:text> <xsl:call-template name="rdf_fncm"> <xsl:with-param name="sflg" select="1"/> </xsl:call-template> <xsl:text>]}</xsl:text> </xsl:template> <xsl:template name="rdf_fncm"> <xsl:param name="sflg"/> <xsl:if test="count(//fncm:TechnicalName) >= $sflg"> <!-- technicalName --> <xsl:if test="contains('1', $sflg)"> <xsl:text>{"technicalName":"</xsl:text> </xsl:if> <xsl:if test="$sflg >= 2"> <xsl:text>,{"technicalName":"</xsl:text> </xsl:if> <xsl:value-of select="substring-after(//fncm:TechnicalName[$sflg]/@rdf:about, 'technicalname:')" /> <xsl:text>"</xsl:text> <xsl:if test="count(//fncm:TechnicalName[$sflg]/@fncm:JapaneseName) = 1"> <xsl:text>,"JapaneseName":"</xsl:text> <xsl:value-of select="//fncm:TechnicalName[$sflg]/@fncm:JapaneseName" /> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(//fncm:TechnicalName[$sflg]/fncm:Classification) = 1"> <xsl:text>,"Classification":"</xsl:text> <xsl:value-of select="//fncm:TechnicalName[$sflg]/fncm:Classification" /> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(//fncm:TechnicalName[$sflg]/fncm:originate/fncm:ScientificName) = 1"> <xsl:text>,"ScientificName":"</xsl:text> <xsl:value-of select="//fncm:TechnicalName[$sflg]/fncm:originate/fncm:ScientificName"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(//fncm:TechnicalName[$sflg]/fncm:originate/fncm:NipponName) = 1"> <xsl:text>,"NipponName":"</xsl:text> <xsl:value-of select="//fncm:TechnicalName[$sflg]/fncm:originate/fncm:NipponName"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(//fncm:TechnicalName[$sflg]/fncm:Image) = 1"> <xsl:text>,"Image":[</xsl:text> <xsl:for-each select="//fncm:TechnicalName[$sflg]/fncm:Image/rdf:Bag/rdf:li"> <xsl:text>{"title":"</xsl:text> <xsl:value-of select="@fncm:title" /> <xsl:text>",</xsl:text> <xsl:text>"date":"</xsl:text> <xsl:value-of select="@dc:date" /> <xsl:text>",</xsl:text> <xsl:text>"resource":"</xsl:text> <xsl:value-of select="@rdf:resource" /> <xsl:choose> <xsl:when test="position()=last()"> <xsl:text>"}</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>"},</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="count(//fncm:TechnicalName[$sflg]/fncm:treaty/rdf:Bag/rdf:li) >= 1"> <xsl:text>,"treaty":[</xsl:text> <xsl:for-each select="//fncm:TechnicalName[$sflg]/fncm:treaty/rdf:Bag/rdf:li"> <xsl:text>{"title":"</xsl:text> <xsl:value-of select="@fncm:title" /> <xsl:text>",</xsl:text> <xsl:text>"resource":"</xsl:text> <xsl:value-of select="@rdf:resource" /> <xsl:choose> <xsl:when test="position()=last()"> <xsl:text>"}</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>"},</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:if test="count(//fncm:TechnicalName[$sflg]/fncm:RedDataBook/rdf:Bag/rdf:li) >= 1"> <xsl:text>,"RedDataBook":[</xsl:text> <xsl:for-each select="//fncm:TechnicalName[$sflg]/fncm:RedDataBook/rdf:Bag/rdf:li"> <xsl:text>{"Regional":"</xsl:text> <xsl:value-of select="@fncm:Regional" /> <xsl:text>",</xsl:text> <xsl:text>"RDBcategory":"</xsl:text> <xsl:value-of select="@fncm:RDBcategory" /> <xsl:choose> <xsl:when test="position()=last()"> <xsl:text>"}</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>"},</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:for-each> <xsl:text>]</xsl:text> </xsl:if> <xsl:variable name="habitf" select="document(//fncm:TechnicalName[$sflg]/fncm:AboutHabit/@fncm:XMLdocument)"/> <xsl:call-template name="owl_Habit_about"> <xsl:with-param name="rcuri" select="substring(//fncm:TechnicalName[$sflg]/fncm:AboutHabit/@rdf:resource, 2)"/> <xsl:with-param name="owlwk" select="$habitf"/> </xsl:call-template> <xsl:text>}</xsl:text> <!-- ループ --> <xsl:call-template name="rdf_fncm"> <xsl:with-param name="sflg" select="$sflg + 1" /> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="owl_Habit_about"> <xsl:param name="rcuri"/> <xsl:param name="owlwk"/> <xsl:for-each select="$owlwk//fncm:Habit"> <xsl:if test="count(@rdf:ID) = 1"> <xsl:if test="contains(@rdf:ID, $rcuri)"> <xsl:if test="count(fncm:habitat) = 1"> <xsl:text>,"habitat":"</xsl:text> <xsl:value-of select="fncm:habitat"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(fncm:origin) = 1"> <xsl:text>,"origin":"</xsl:text> <xsl:value-of select="fncm:origin"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(fncm:season) = 1"> <xsl:text>,"season":"</xsl:text> <xsl:value-of select="fncm:season"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(fncm:feature) = 1"> <xsl:text>,"feature":"</xsl:text> <xsl:value-of select="fncm:feature"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(fncm:use) = 1"> <xsl:text>,"use":"</xsl:text> <xsl:value-of select="fncm:use"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:if test="count(fncm:attention) = 1"> <xsl:text>,"attention":"</xsl:text> <xsl:value-of select="fncm:attention"/> <xsl:text>"</xsl:text> </xsl:if> </xsl:if> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
この意見には賛成です。まったくもってその通りです。このページを作った動機。最近スタイルシートを使った「タグ」等を「配布」しているサイトを良く見かけますが、Win+ie以外ではレイアウトが崩れて見れない物が、やたらと多い。(しかもテーブルでレイアウト+CSSで装飾しながら)Win+ieでしか閲覧できないサイトを作るのは当人の勝手ですが、Win+ieでしか表示されない「タグ」や「テンプレート」を「配布」するなんてこれはもう公害です。 ということで、このページは公害対策用に作成しました。
Window オブジェクトの opener アトリビュートは、target="_blank" や rel="noreferrer" なリンクから開かれたページでは存在しないようになりました。(強調ムシムシ)となってます。
target="_blank"
、rel="noreferrer"
以外の場合はリファラは残るように思えます。new window
はHTML5に倣えば、リファラを残さないかもしれません。new Object()
かnew Arrary
で作られたオブジェクトが対象になります。var str = "{x:1, y:2}";
なんて書いてありますが間違いです。var str = '{"x":1, "y":2}';
が正解です。よく見かけるので真似しないでください。{"変数-1":[{ },{ }],"変数-2:[{ }],~}か
{"変数-1":[{"KEY":"変数-1で一意の値",~},{"KEY":"変数-1で一意るの値",~}],のいずれかで記録できます。
"変数-2":[{"KEY":"変数-2で一意の値",~}],~}
{"変数-1":[{ },{ }],"変数-2:[{ }],~}は変数で指定した名前のオブジェクトに、データをためていくだけのJSON形式です。
{"変数-1":[{"KEY":"変数-1で一意の値",~},{"KEY":"変数-1で一意るの値",~}],は変数で指定した名前のオブジェクトに、KEYを付加してデータの変更をできるようにしたJSONです。
"変数-2":[{"KEY":"変数-2で一意の値",~}],~}
date("Y/m/d H:i:s", date("U"))
で自動的にKEYにしてしようかと思ったのですがやめました。必要なら自分でおくればいいわけだし。class KVS_Module { public $JSON_Text; protected $KVS_Data; protected $new_memberJSON; protected $FileName; protected $process; protected $KeyText; protected $members; protected $New_JSON_Object; protected $FileUrl; private $key; private $value; private $Read_Text; private $JSON_Object; private $DB_Data; private $output; function __construct ($in1 = ""){ $this -> KVS_Data = $in1; foreach($this -> KVS_Data as $this -> key => $this -> value ){ switch($this -> key) { case "NewData": $this -> new_memberJSON = $this -> value; break; case "FileUrl": $this -> FileName = $this -> value; break; case "process": $this -> process = $this -> value; break; case "KeyText": $this -> KEYText = $this -> value; break; } } } function KVS_Data_Get() { if ($this -> FileName != "") { $this -> FileUrl = "ファイルの場所"; if ( !file_exists( $this -> FileUrl )) { touch( $this -> FileUrl ); chmod($this -> FileUrl,0666); } $this -> Read_Text = file_get_contents($this -> FileUrl); $this -> JSON_Object = json_decode($this -> Read_Text, true); if (!$this -> JSON_Object[$this -> KEYText]) { return 'No Data'; } $this -> DB_Data = $this -> JSON_Object[$this -> KEYText]; $this -> JSON_Text = json_encode($this -> DB_Data); return $this -> JSON_Text; } } function KVS_Data_Put() { $this -> FileUrl = "ファイルの場所"; if ( !file_exists( $this -> FileUrl )) { touch( $this -> FileUrl ); chmod($this -> FileUrl,0666); } $this -> JSON_Text = file_get_contents($this -> FileUrl); $this -> JSON_Object = json_decode($this -> JSON_Text, true); $this -> New_JSON_Object = json_decode($this -> new_memberJSON); if (!$this -> JSON_Object[$this -> KEYText]) { $this -> JSON_Object[$this -> KEYText][] = (array)$this -> New_JSON_Object; $this -> New_JSON_Object = 'NOT DATA'; } $this -> DB_Data = $this -> JSON_Object[$this -> KEYText]; //stdClass objectを連想配列にキャスト foreach($this -> DB_Data as $this -> value){ $this -> members[] = (array)$this -> value; } $KVS_Match_object = new KVS_match_array($this -> members,$this -> New_JSON_Object); $this -> output = $KVS_Match_object -> match_array($this -> process); //$output = match_array($this -> members,$this -> New_JSON_Object,$this -> process); $this -> JSON_Object[$this -> KEYText] = $this -> output; //JSONフォーマットへ変換して書き込み if (is_writable($this -> FileUrl)) { $JSON_File = fopen($this -> FileUrl, 'w'); fwrite($JSON_File,json_encode($this -> JSON_Object)); fclose($JSON_File); } } }
class KVS_match_array { public $Original; protected $Updating; protected $Processing; private $key; private $value; private $KeyFLG; private $KeyData; private $pointer; private $point; function __construct ($in1 = "", $in2 = "", $in3 = ""){ $this -> Original = $in1; $this -> Updating = $in2; $this -> Processing = $in3; } function match_array() { if ($this -> Updating != 'NOT DATA') { $this -> KeyFLG = false; foreach($this -> Updating as $this -> key => $this -> value ){ if ($this -> key == 'key') { $this -> KeyData = $this -> value; $this -> KeyFLG = true; } } $i = 0; if ($this -> Original) { $this -> KeyFLG = false; } if ($this -> KeyFLG) { foreach($this -> Original as $this -> value){ if (!$this -> value['key']) { $this -> KeyFLG = false; } else { if($this -> value['key'] == $this -> KeyData) { $this -> pointer = $this -> point; $this -> KeyFLG = true; $this -> point ; } } } } if ($this -> Processing == 'DEL') { unset($this -> Original[$this -> pointer]); } else { if($this -> KeyFLG) { //keyがマッチするものがあれば、そのポインタの配列を新しい配列に差し替え $this -> Original[$this -> pointer] = $this -> Updating; } else { //keyがマッチするものがなければ、末尾に追加 $this -> Original[] = $this -> Updating; } } } return $this -> Original; } }