这让我感到困惑。我显然不明白soemthing非常基本,我希望有人可以解释这件事。
<form action="/tagged" method="get">
<input type="text" name="q" value="{SearchQuery}"/>
<input type="submit" value="Search"/>
</form>
On this page给了我http://syndex.me/tagged?q=yellow
但是,如果我将/tagged
更改为/search
(tumblr搜索表单的默认状态),它实际上会做正确的事情,并为http://syndex.me/search/yellow的效果提供一个网址。
所有这一切只是因为,tumblrs搜索实际上已被打破。那就对了。价值8亿美元的公司没有可行的搜索功能。问题是如果你去http://syndex.me/tagged/yellow它实际上有效!。所以,我只是想破解服务并将/search
切换为tagged
。非常精神。
我很高兴以任何可能的方式破解... jQuery?
非常感谢。
答案 0 :(得分:3)
页面的各个部分是搜索功能的核心:
<强> JavaScript的:强>
function handleThis(formElm){
window.location="http://syndex.me/tagged/"+formElm.q.value+"";
return false;
}
<强> HTML:强>
<form onsubmit="return handleThis(this)" >
<input type="text" name="q" value=""/>
</form>
使用onsubmit="return handleThis(this)"
将事件侦听器绑定到您的表单。
onsubmit
。onsubmit
属性(又称事件处理程序)中,您会注意到 return handleThis(this)
。使用this
关键字作为第一个参数调用此函数(在同一页面中定义;向前看)。来自事件处理程序的上下文中的this
引用事件侦听器的所有者元素,在本例中为<form>
。handleThis(formElm)
中,您会注意到"http://syndex.me/tagged/"+formElm.q.value
。 formElm.q
引用表单元素中名为q
的输入元素。 formElem.q.value
保存input元素的值,其中包含搜索关键字。刚刚构建的网址已分配给window.location
,该http://syndex.me/tagged/
会向return false
search_terms 发起新请求。onsubmit
。在return handleThis(this)
事件处理程序中,您已看到handleThis
。 onsubmit
的返回值将传递给onsubmit="return false"
事件处理程序。所以,语句等于return false
。这意味着表单不再提交自己。action
。发生错误时,或者如果用户已禁用JavaScript,表单将自行提交到action
中定义的URL。由于未指定http://syndex.me/
属性,因此在此情况下使用页面的当前网址http://syndex.me/?q=
。所有已命名的表单元素都会添加到请求中,因此最终的网址将为<form action="/tagged"
search_terms 要回到您的问题,onsubmit
method =“get”&gt;`:
onsubmit
事件处理程序。onsubmit
事件处理程序,HTML表单将由浏览器提交 (假想的return true
处理程序等于/tagged
。< / LI>
http://syndex.me/tagged?q=
,转换为名为“已标记”的文件主机的ROOT目录。在这种情况下:q=..
search_terms 。 (q
是来自名为action
)的输入元素的结果
当您将/tagged/
更改为/tagged
而不是http://syndex.me/tagged/?q=
时,提交的表单将请求以下页面:/tagged
search_terms 当您将/search
更改为http://syndex.me/search?q=...
时,您的表单会提交至http://syndex.me/search/...
。从标题中可以看出,此位置重定向到RewriteEngine On
RewriteRule ^/search\?q=(.*)$ /search/$1 [L,R=301]
。
使用.htaccess
中定义的规则可能会实现此行为:
{{1}}
明白了?